[ios]NSLayoutConstraints 与 NSLayoutAttributeTrailing 不如预期

标签: Xcode ios
发布时间: 2017/3/28 23:44:24
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有两个新约束的数组。

当我设置这些限制按钮从超级视图的中心放置 20 和 90 像素。 我想要从底部按钮 20px 和 90px 从超级视图的右边。 我到底做错了? 我与两个约束创建的数组︰

NSLayoutConstraint *bottomTrailingConstraint = [NSLayoutConstraint constraintWithItem:_gameSettingsButton
                                                                            attribute:NSLayoutAttributeTrailing
                                                                            relatedBy:NSLayoutRelationEqual
                                                                               toItem:_gameSettingsButton.superview
                                                                            attribute:NSLayoutAttributeTrailing
                                                                           multiplier:1.0f
                                                                             constant:90.0f];

NSLayoutConstraint *bottomSpaceConstraint = [NSLayoutConstraint constraintWithItem:_gameSettingsButton
                                                                         attribute:NSLayoutAttributeBottom
                                                                         relatedBy:NSLayoutRelationEqual
                                                                            toItem:_gameSettingsButton.superview
                                                                         attribute:NSLayoutAttributeBottom
                                                                        multiplier:1.0f
                                                                          constant:20.0f];

_bottomConstraintsArray = @[bottomTrailingConstraint, bottomSpaceConstraint];

我删除旧约束,然后添加新约束︰

NSArray *oldconstraints = _gameSettingsButton.constraints;
[_gameSettingsButton.superview removeConstraints: oldconstraints];
[_gameSettingsButton.superview addConstraints:_bottomConstraintsArray];

我也尝试过: [_gameSettingsButton.superview updateConstraints] 但这改变不了什么。

任何帮助,将不胜感谢。

解决方法 1:

这︰

NSLayoutConstraint *bottomTrailingConstraint = [NSLayoutConstraint constraintWithItem:_gameSettingsButton
                                                                            attribute:NSLayoutAttributeTrailing
                                                                            relatedBy:NSLayoutRelationEqual
                                                                               toItem:_gameSettingsButton.superview
                                                                            attribute:NSLayoutAttributeTrailing
                                                                           multiplier:1.0f
                                                                             constant:90.0f];

意思是︰

_gameSettingsButton.trailing == _gameSettingsButton.superview.trailing * 1 + 90

这将使外超级视图按钮的后缘。假设左到右的布局 (因此,"尾随"意味着"右"),该按钮的右边缘将会超级视图右侧的 90 点。

同样,这︰

NSLayoutConstraint *bottomSpaceConstraint = [NSLayoutConstraint constraintWithItem:_gameSettingsButton
                                                                         attribute:NSLayoutAttributeBottom
                                                                         relatedBy:NSLayoutRelationEqual
                                                                            toItem:_gameSettingsButton.superview
                                                                         attribute:NSLayoutAttributeBottom
                                                                        multiplier:1.0f
                                                                          constant:20.0f];

意思是︰

_gameSettingsButton.bottom == _gameSettingsButton.superview.bottom * 1 + 20

再次,这将使外部超级视图按钮。该按钮的底部边缘将下跌 20 点从超级视图的底部。

你也想一起去交换第一和第二项或你想要否定该常数。

此外,你查询按钮中的约束条件,然后从超级视图中删除这些约束。好吧,既然你查询的约束不是超级景观,不执行任何操作。(事实上,你的结果可能是查询的一个空数组因为没有什么永远将任何约束添加到按钮本身。)你的意思可能是查询超级视图上的约束,但我怀疑有一定限制无关你不想要删除的按钮。所以,你需要记住的约束 (大概在实例变量) 的按钮设置并删除那些。如果初始约束建立了 IB,那么您需要设置电源插座,以跟踪他们。

官方微信
官方QQ群
31647020