Objective-c – 由Interface Builder生成的NSIBPrototypingLayoutConstraint autolayout约束的iOS7问题

概述以前在iOS6中,我的聊天消息视图控制器显示和动画正确,在IB中精心构造的自动布局约束.以下是 Xcode 5中删除约束的当前视图层次结构: 升级到XCode 5和iOS7后,我发现我需要清除所有旧的限制,以便考虑默认的半透明状态栏,否则我的工具栏将落在状态栏下.尽管调用setEdgesForExtendedLayout:与UIRectEdgeNone无关. 我现在试图在viewDidLoad中以 以前在iOS6中,我的聊天消息视图控制器显示和动画正确,在IB中精心构造的自动布局约束.以下是 Xcode 5中删除约束的当前视图层次结构:

升级到XCode 5和iOS7后,我发现我需要清除所有旧的限制,以便考虑默认的半透明状态栏,否则我的工具栏将落在状态栏下.尽管调用setEdgesForExtendedLayout:与UIRectEdgeNone无关.

我现在试图在vIEwDIDLoad中以编程方式创建所有的约束:

// self.vIEw.translatesautoresizingMaskIntoConstraints = NO; // errors either wayNSArray *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 belowcontainerVertConstraints = [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的大小以缩小与键盘的外观.)

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

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

("<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.

为什么当我设置将autotoresizingMaskIntoConstraints转换为NO时,由IB创建的NSIBPrototyPingLayoutConstraint V:| – (460) – [UIVIEw:0x140ddef0(_vIEwinputContainer)],当我已经在_vIEwinputContainer和上面的_tableVIEw之间定义了明确的垂直约束?

我尝试在乐器中使用可可版面,但是有太多的噪音,无法理解它.

解决方法 除了使用translateautoresizingMaskIntoConstraints之外,我不得不手动删除视图上的约束.
[_vIEwContainer removeConstraints:_vIEwContainer.constraints];[self.vIEw removeConstraints:self.vIEw.constraints];

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

总结

以上是内存溢出为你收集整理的Objective-c – 由Interface Builder生成的NSIBPrototypingLayoutConstraint autolayout约束的iOS7问题全部内容,希望文章能够帮你解决Objective-c – 由Interface Builder生成的NSIBPrototypingLayoutConstraint autolayout约束的iOS7问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1249183.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存