2015-04-29 2 views
0

У меня есть представление, которое является подклассом UIView, когда я добавляю ограничения в xib, и теперь я должен получить ограничения массива, я пытался, но он отличается от iOS 7 и iOS 8. он работает для iOS 7 и iOS 8 является недопустимым.Как получить ограничения - это ios8 перед layoutSubviews?

-(id)initWithCoder:(NSCoder *)aDecoder{ 

    self = [super initWithCoder:aDecoder]; 
    if (self) { 

    NSLog(@"constraints = %@",self.constraints); 
    } 
    return self; 
} 
+0

Я не знаю, когда в режиме просмотра добавляются ограничения. Может быть, не в initWithCoder, а позже в iOS8? – Volker

+0

Я добавляю ограничения в xib, он вызывает initwithCoder при просмотре нагрузки. – taitanxiami

+0

В чем разница? – Azat

ответ

0

Is AutoLayout выключен для вашего xib?

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

2015-04-29 00:30:48.796 simpletest[37423:4105842] constraints = (
) 

Если я включаю AutoLayout обратно, я получаю список ограничений:

2015-04-29 00:32:03.755 simpletest[37448:4107364] constraints = (
    "<NSLayoutConstraint:0x7a694c90 V:[_UILayoutGuide:0x7a87f280]-(0)-[UIButton:0x7a6834a0'Another View']>", 
    "<NSLayoutConstraint:0x7a691b90 UIButton:0x7a6834a0'Another View'.leading == UIView:0x7a87ef50.leadingMargin>", 
    "<NSLayoutConstraint:0x7a6871c0 V:[UIButton:0x7a6834a0'Another View']-(100)-[UIView:0x7a87f0f0]>", 
    "<NSLayoutConstraint:0x7a696670 UIView:0x7a87f0f0.leading == UIView:0x7a87ef50.leadingMargin + 30>", 
    "<NSLayoutConstraint:0x7a691bf0 UIView:0x7a87ef50.trailingMargin == UIView:0x7a87f0f0.trailing + 30>", 
    "<NSLayoutConstraint:0x7a686620 V:[UIView:0x7a87f0f0]-(100)-[_UILayoutGuide:0x7a87f950]>", 
    "<_UILayoutSupportConstraint:0x7a68d8f0 V:[_UILayoutGuide:0x7a87f280(0)]>", 
etc. 

флажок для включения AutoLayout включения или выключения находится в нижней части этого изображения: enter image description here


Перечитывая свой пост, кажется, что вы фактически добавляете ограничения, которые вы не можете сделать, если вы отключили AutoLayout. Так что, возможно, это не ваша проблема. Однако, как вы можете видеть из моего вывода, iOS8 не возвращает нуль для self.constraints, когда есть ограничения.

+0

НЕТ, если я отключу его, я не добавлю ограничений. Вы уверены, что вы печатаете журнал в методе initwihtCoder? – taitanxiami

+0

О, это моя вина, это пустой массив. – taitanxiami

0

Во-первых, вы должны подумать о том, чтобы переместить свою логику в awakeFromNib. Это начальная точка для всех nibs/xib. Например, у initWithCoder нет загруженных IBOutlets.

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

Однако, если A имеет ограничения, не содержащие никаких других видов, таких как высота или ширина, вы найдете их в A.constraints.

+0

yes i konw, поэтому я добавляю ограничение для фиксированной высоты. – taitanxiami

+0

Почему вы хотите получить cosntraint перед layoutSubviews? – Pauls

+0

Поскольку я хочу получить оригинальную высоту textview, то для ограничения высоты текстового поля, когда пользователь вводит – taitanxiami

Смежные вопросы