2014-09-16 4 views
1

Я знаю, что делает вид имеет следующие 3 шага в следующем порядке:Как обновить ограничение после просмотра подклассов?

  1. обновление ограничений
  2. просмотров макета (здесь, где мы получаем расчет кадров)
  3. дисплей

Теперь, когда я изменяю пользовательские высоты кнопок, и эта кнопка имеет ограничение с окружающими представлениями, как я могу обновить эти ограничения и избежать совпадения с представлениями? Вы можете видеть прокомментированную строку, а не из них.

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 

     //viewController!.view.setNeedsUpdateConstraints() 
     //self.setNeedsUpdateConstraints() 
     //self.setNeedsLayout() 
    } 
} 

ответ

1

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

В моем случае я изменяю высоту представления и в процессе нарушая ограничение.

Я добавил 3 строки в мой пользовательский класс:

@IBOutlet weak var height: NSLayoutConstraint 

self.bounds.size.height = size.height + 8 
height.constant = size.height + 8 
Смежные вопросы