过界面生成器生成的NSIBPrototypingLayoutCo

过界面生成器生成的NSIBPrototypingLayoutCo

本文介绍了通过界面生成器生成的NSIBPrototypingLayoutConstraint自动布局约束iOS7问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

previously在iOS6的,我的显示聊天信息视图控制器,并与IB精心构造的自动布局约束正确动画。下面是在X $℃下除去$ C 5的约束当前视图层次结构:

Previously in iOS6, my chat message view controller displayed and animated correctly with carefully constructed autolayout constraints in IB. Here's the current view hierarchy with the constraints removed in Xcode 5:

升级到X code 5和iOS7后,我发现我需要清除,以占默认半透明的状态条都是老的约束,否则我的工具栏将下降状态栏下。这件事发生,尽管调用setEdgesForExtendedLayout:与UIRectEdgeNone。

After upgrading to XCode 5 and iOS7, I found I needed to clear all the old constraints in order to account for the default translucent status bar, otherwise my toolbar would fall under the status bar. This happened despite calling setEdgesForExtendedLayout: with UIRectEdgeNone.

我现在尝试在viewDidLoad中编程创建所有的约束:

I am now attempting to create all the constraints programmatically in viewDidLoad:

// self.view.translatesAutoresizingMaskIntoConstraints = NO; // errors either way
NSArray *viewHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_toolbar]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_toolbar)];
[self.view addConstraints:viewHorizConstraints];
viewHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_viewContainer]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewContainer)];
[self.view addConstraints:viewHorizConstraints];

NSArray *viewVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(20)-[_toolbar(44)]-[_viewContainer]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_toolbar, _viewContainer)];
[self.view addConstraints:viewVertConstraints];

NSArray *tableContainerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_tableView(<=460@999)][_viewInputContainer(44)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView, _viewInputContainer)];
[_viewTableContainer addConstraints:tableContainerVertConstraints];


NSArray *containerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_viewTableContainer][_viewOptions]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewTableContainer, _viewOptions)];
[_viewContainer addConstraints:containerVertConstraints];

//    _constraintContainerVertSpace = [NSLayoutConstraint constraintWithItem:_viewTableContainer attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:_viewContainer attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; // same as below

containerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[_viewTableContainer]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewTableContainer)];
_constraintContainerVertSpace = [containerVertConstraints lastObject];
[_viewContainer addConstraint:_constraintContainerVertSpace];

containerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=0)-[_viewOptions]-(>=-216@999)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewOptions)];
[_viewContainer addConstraints:containerVertConstraints];

但是,如果我试图改变我的containerView和tableContainerView之间的垂直空间的限制,我得到的错误。 (我试图调整tableContainerView与键盘的外观萎缩。)

However, if I attempt to change the vertical space constraint between my containerView and tableContainerView, I get errors. (I'm trying to resize the tableContainerView to shrink with the appearance of the keyboard.)

[UIView animateWithDuration:0.25f
                      delay:0
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     _constraintContainerVertSpace.constant = -keyboardHeight;
                 } completion:nil];

这些是不能同时满足约束:

These are the constraints that fail to satisfy simultaneously:

(
"<NSIBPrototypingLayoutConstraint:0x140d7bb0 'IB auto generated at build time for view with fixed frame' V:|-(460)-[UIView:0x140ddef0]   (Names: '|':UIView:0x140dde60 )>",
"<NSIBPrototypingLayoutConstraint:0x140d7c10 'IB auto generated at build time for view with fixed frame' V:[UIView:0x140ddef0(44)]>",
"<NSLayoutConstraint:0x14d9db30 V:[UIView:0x140ddef0]-(0)-|   (Names: '|':UIView:0x140dde60 )>",
"<NSIBPrototypingLayoutConstraint:0x140e0290 'IB auto generated at build time for view with fixed frame' V:|-(0)-[UIView:0x140dde60]   (Names: '|':UIView:0x140dddd0 )>",
"<NSLayoutConstraint:0x14d9df60 V:[UIView:0x140dde60]-(-216)-|   (Names: '|':UIView:0x140dddd0 )>",
"<NSIBPrototypingLayoutConstraint:0x140e0830 'IB auto generated at build time for view with fixed frame' V:|-(64)-[UIView:0x140dddd0]   (Names: '|':UIView:0x140e0470 )>",
"<NSLayoutConstraint:0x14d9d820 V:[UIView:0x140dddd0]-(0)-|   (Names: '|':UIView:0x140e0470 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1403a0b0 h=--& v=--& V:[UIView:0x140e0470(568)]>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x14d9db30 V:[UIView:0x140ddef0]-(0)-|   (Names: '|':UIView:0x140dde60 )>

的UIView:0x140dde60在这种情况下是_viewTableContainer。 0x140ddef0 = _viewInputContainer。 0x140dddd0 = _viewContainer。

UIView:0x140dde60 in this case is _viewTableContainer. 0x140ddef0 = _viewInputContainer. 0x140dddd0 = _viewContainer.

这是为什么NSIBPrototypingLayoutConstraint五:| - (460) - [UIView的:0x140ddef0(_viewInputContainer)由IB创建时我已经设置translatesAutoresizingMaskIntoConstraints为NO,当我已经定义_viewInputContainer和之间建立明确的约束垂直_tableView上面呢?

Why is this NSIBPrototypingLayoutConstraint V:|-(460)-[UIView:0x140ddef0(_viewInputContainer)] being created by IB when I've set translatesAutoresizingMaskIntoConstraints to NO, and when I've already defined unambiguous vertical constraints between _viewInputContainer and the _tableView above it?

我在使用仪器可可布局试过,但有太多的噪音,使这毫无意义。

I've tried using Cocoa Layout in Instruments, but there's too much noise to make any sense of it.

推荐答案

我不得不手动删除在另外的看法限制使用translatesAutoresizingMaskIntoConstraints。

I had to manually remove constraints on the views in addition to using translatesAutoresizingMaskIntoConstraints.

[_viewContainer removeConstraints:_viewContainer.constraints];
[self.view removeConstraints:self.view.constraints];

添加这些更改后,没有更多的错误与动画。

After adding these changes, there were no more errors with animating.

这篇关于通过界面生成器生成的NSIBPrototypingLayoutConstraint自动布局约束iOS7问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 14:26