我会很简短,也很清楚。我想使用约束来做下图中的内容。 任何建议或解决方案?
描述:
有色的地方是UIViews,含有ex。 4个标签。那么我应该使用什么约束来操纵第二个UIView,所以在纵向模式下是在第一个下面,在Landscape中是否在它旁边?
答案 0 :(得分:0)
下面的代码假设您已经在代码中引用了橙色视图和黄色视图。在纵向模式下,您希望它们按顺序排列,以便您可以拥有这样的布局
NSLayoutConstraint *portraitConstraint = [NSLayoutConstraint
constraintWithItem:orangeView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:yellowView
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:2.0f];
[self.view addConstraint:portraitConstraint];
在横向模式下,您可以使用布局约束
NSLayoutConstraint *landscapeConstraint = [NSLayoutConstraint
constraintWithItem:orangeView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:yellowView
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:2.0f];
[self.view addConstraint:landscapeConstraint];
现在这些不是您需要的完整约束列表,如果您构建代码并且只需要代码,您必须将橙色视图保持在顶部,前导和尾随视图,然后在代码中将黄色视图粘贴到纵向视图中的前导,尾随和底部。
在风景中你会看到橙色视图粘在顶部,底部和前方,而黄色视图会粘在顶部,底部和尾部。
上面的约束允许你不需要设置一个高度,但你可能也想说像橙色视图底部是centerY - 1.0在纵向和centerX - 1.0f在横向,从而避免需要宽度和高度,因此不必担心屏幕的大小。中心X和Y位于
之下NSLayoutConstraint *centerX = [NSLayoutConstraint
constraintWithItem:orangeView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0f
constant:-1.0f];
[self.view addConstraint:centerX];
NSLayoutConstraint *centerY = [NSLayoutConstraint
constraintWithItem:orangeView
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterY
multiplier:1.0f
constant:-1.0f];
[self.view addConstraint:centerY];
上述限制应该可以帮助您解决问题。