Регулировка ширины UIButton в зависимости от его заголовка

У меня много проблем с решением этого вопроса. У меня следующая ситуация. В моей раскадровке у меня есть табличное представление, а в ячейке табличного представления у меня есть UIButton и еще один UIButton рядом с ним. На первой кнопке есть текст, а на второй - изображение звезды. Я бы хотел следующее:

  1. Я хотел бы иметь первую кнопку, чтобы регулировать ее ширину в зависимости от ее текста / заголовка.

  2. Я бы хотел, чтобы вторая кнопка перемещалась по направлению к конечному пространству первой кнопки

Я пробовал несколько предложений с sizetofit (), но не могу понять


person symenize    schedule 19.11.2017    source источник
comment
Вы можете подробнее рассказать об этом? потому что я тоже видел комментарии по этому поводу, но я не до конца понял   -  person symenize    schedule 19.11.2017
comment
Пожалуйста, посмотрите видео WWDC об Autolayout. Они очень информативны   -  person vadian    schedule 19.11.2017


Ответы (1)


Используя Autolayout, вам не нужно беспокоиться об изменении размера кнопки самостоятельно. Вот краткий макет для иллюстрации:

Кнопка текста и информации

Я добавил текстовую кнопку и маленькую круглую кнопку, имитирующую вашу звезду. В построителе интерфейса в Xcode я даю ограничения первой кнопки для:

  • Фиксированная высота
  • Фиксированное пространство слева от обзора
  • Фиксированное пространство в верхней части обзора

введите описание изображения здесь

Затем моя кнопка второго раунда получает следующие ограничения:

  • Фиксированная ширина и высота
  • Фиксированное горизонтальное пространство для текстовой кнопки
  • Вертикальное выравнивание по центру с помощью текстовой кнопки

введите описание изображения здесь

Теперь, когда я установил длинный заголовок для своей кнопки в коде, вы увидите, что они следуют друг за другом так, как вы описываете:

введите описание изображения здесь

person Terje    schedule 19.11.2017
comment
Благодарю за ваш ответ! У меня все еще есть проблема. Когда я даю кнопкам указанные ограничения, текст в первой кнопке сжимается, поэтому вместо «contraint» вы видите, например, «co..aint» - person symenize; 19.11.2017
comment
Это не всегда срабатывает. Вам также необходимо изменить приоритет захвата контента и приоритет сжатия контента. Объятие будет контролировать, насколько близко элемент управления обнимает его содержимое (установите низкий уровень, чтобы он расширялся, или высокий, чтобы он обнимал). Для сжатия он определяет, как элемент управления сжимается под давлением (установите низкий уровень, чтобы он сжимался легко, или высокий, чтобы он никогда не сжимался). сжимает) .. В вашем случае вы хотите, чтобы низкое сжатие и высокое сжатие .. ИЛИ охват по умолчанию и высокое сжатие: stackoverflow.com/a/ 23203345/1462718 - person Brandon; 19.11.2017
comment
Я заставил его работать! Спасибо! Я сделал что-то не так, наверное, в первый раз - person symenize; 19.11.2017
comment
@ Брэндон, ты прав и неправ. Я заставил его работать после решения Терье, но только когда я удалил свои текущие кнопки и заменил их новыми. Перед удалением я пробовал использовать объятие и сжатие, но у меня это не сработало, но, возможно, из-за ограничений - person symenize; 19.11.2017
comment
@Terje ваше решение не работает, когда вы используете вставки заголовка. Есть ли способ разрешить ему работать со вставками? - person symenize; 19.11.2017
comment
@symenize; Нет .. Я не ошибаюсь. Вы случайно заставили его работать с его кодом. Если есть что-то с меньшим охватом и более высоким сопротивлением сжатию, его код не будет работать. Вам пришлось удалить свои кнопки, возможно, потому, что это уже было так. - person Brandon; 20.11.2017
comment
как бы вы это сделали, потому что, хотя решение terje работало, оно не работало при использовании вставок? - person symenize; 20.11.2017