Получить метку UIButtons для выравнивания независимо от размера изображения - PullRequest
0 голосов
/ 27 августа 2018

У меня есть несколько кнопок, которые я добавляю в контроллер вида, у каждого из которых есть разные изображения и метка.

Я хочу, чтобы метки кнопок были выровнены по их переднему краю, и желательно, чтобы изображения были выровнены по вертикальному центру, хотя я остановлюсь только на том, чтобы метки были выровнены.

Возможно ли это с настройками на самой UIButton? Или мне было бы лучше просто сделать собственный вид с изображением и меткой?

Вот грубый пример того, что я имею в виду. Зеленый - это кнопка, красный - это изображение.

По сути, я хочу определить максимальный размер изображения с центром в центре изображения, и метка всегда будет соответствовать этому заданному размеру, чтобы они были выровнены.

Я добился этого с помощью раскадровки, установив пользовательские вставки на каждой кнопке, чтобы получить выравнивание, но я заново создаю View Controller, чтобы обойти некоторые ограничения из-за Reveal View Controller. Это «вид сзади», наше меню. Мы хотим иметь возможность более динамично выбирать, какой контроллер представления следует запускать в качестве контроллера переднего вида, что при использовании раскадровок не представляется возможным. Вы должны явно указать, какой будет вид спереди.

enter image description here

1 Ответ

0 голосов
/ 28 августа 2018

Для выравнивания текста в кнопках с изображениями разного размера ...

  1. Установите все свои кнопки 'contentHorizontalAlignment = .left
  2. Рассчитайте ширину самого широкого изображения ...

let maxWidth = [button1, button2, button3].map({$0!.imageView!.image!.size.width}).max()!

  1. Чтобы переместить все содержимое вправо (поэтому установите пространство слева от изображения), установите кнопки 'contentEdgeInsets.left. Чтобы переместить текст дальше вправо (устанавливая расстояние между изображением и текстом), установите кнопки 'titleEdgeInsets.left

Вот так ...

let minInset: CGFloat = 8 // largest image has inset of 8 to left and right
for button in [button1, button2, button3] {

    let imageWidth = button!.imageView!.image!.size.width
    let inset = (maxWidth + (minInset * 2) - imageWidth) / 2

    button?.contentEdgeInsets.left = inset
    button?.titleEdgeInsets.left = inset
}

и вы должны в конечном итоге ...

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...