iOS:自动布局灵活边距
Posted
技术标签:
【中文标题】iOS:自动布局灵活边距【英文标题】:iOS: Autolayout flexible margins 【发布时间】:2013-12-21 15:33:08 【问题描述】:我的UIView
中有一个UILabel
对象。当它的超级视图大小发生变化时,我想让这个标签分别移动。这就像旧的UIViewAutoresizingFlexibleTopMargin
、UIViewAutoresizingFlexibleRightMargin
、UIViewAutoresizingFlexibleBottomMargin
和UIViewAutoresizingFlexibleLeftMargin
一样,如果superview的高度发生变化,标签的上边距会分别发生变化,左边距也是如此。
如何使用 Autolayout
而不是旧的 autoresizingmask
来做到这一点?
【问题讨论】:
如果上边距应该改变,下边距是否固定?在这种情况下,您只需添加一个定义底部边距的约束。 我希望所有四个边距都像旧行为一样分别移动 @dasdom 我设置了一个底部约束以将子视图粘贴到视图控制器视图的底部,但子视图在旋转过程中上下跳跃。但是,使用UIViewAutoresizingFlexibleTopMargin
,子视图在旋转期间保持固定在其父视图的底部。我想我会坚持使用autoresizingMask
。
【参考方案1】:
您使用 NSLayoutConstraint 的 multiplier 属性来实现这一点。您不能将边缘属性与尺寸属性混合使用,但您可以使用底部和右侧边缘作为尺寸的代理。
UIView * parent = [[UIView alloc] init];
UILabel * label = [[UILabel alloc] init];
[parent addSubview:label];
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
//Label top stays at 20% of the height of the view
NSLayoutConstraint * topMargin = [NSLayoutConstraint constraintWithItem:label
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:parent
attribute:NSLayoutAttributeBottom
multiplier:0.2f
constant:0.0f];
[parent addConstraint:topMargin];
【讨论】:
我可以使用 IB 来形成这些约束吗?以上是关于iOS:自动布局灵活边距的主要内容,如果未能解决你的问题,请参考以下文章