UIButton с увеличением высоты, если ширины недостаточно?

Мне нужна кнопка для настройки через autolayout, которая высота будет увеличиваться, если горизонтального пространства недостаточно, т.е. после поворота. У меня есть начальное и конечное ограничение для родительского представления, а в портретном режиме не хватает места, поэтому я подумал о том, чтобы не уменьшать размер шрифта, а увеличивать высоту и устанавливать Word Wrap для Line Break. Я экспериментировал с size classes, но почему-то всегда используется wCompact hAny, потому что я тестирую в iPhone. Таким образом, установка разной высоты кнопки для разных классов размера не имела никакого эффекта.

Кто-нибудь знает, как установить зависимость высоты кнопки от доступной ширины кнопки и содержимого с помощью ограничения автомакета?

На iPhone для кнопки ниже нужны две строки, не 30px, а ок. 60 пикселей.

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


person János    schedule 16.09.2014    source источник
comment
@janos- какой может быть максимальная ширина кнопки ...?   -  person Vivek Sehrawat    schedule 16.09.2014
comment
нет максимальной ширины, это зависит от того, на каком устройстве работает приложение   -  person János    schedule 16.09.2014
comment
@janos- вы должны решить, какой будет максимальная ширина кнопки.   -  person Vivek Sehrawat    schedule 16.09.2014
comment
Я бы не стал делать это программно методом sizeWithAttributes   -  person János    schedule 16.09.2014


Ответы (3)


Почему вы используете кнопку? Кнопка не для этого. Если у вас есть такой объем текста для отображения, используйте либо UILabel, либо UITextView. Затем вы можете добавить к нему распознаватель жестов, чтобы зафиксировать касание.

person Fogmeister    schedule 16.09.2014

Вы можете использовать UILabel и можете использовать UITapGestureRecognizer на нем. и установите количество строк = 0 в файле пера и выполните одно действие жеста касания. он будет работать как кнопка почти без кода, как вы хотите

person Vivek Sehrawat    schedule 16.09.2014

Поскольку я подозреваю, что это невозможно с помощью Interface Builder, я сделал это с подклассом UIButton:

class DynamicHeightButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()

        let size = (self.titleForState(UIControlState.Normal)! as NSString).boundingRectWithSize(CGSizeMake(self.bounds.size.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17)], context: nil)
        self.bounds.size.height = size.height + 8
    }
}
person János    schedule 16.09.2014