iOS:自动布局灵活边距

Posted

技术标签:

【中文标题】iOS:自动布局灵活边距【英文标题】:iOS: Autolayout flexible margins 【发布时间】:2013-12-21 15:33:08 【问题描述】:

我的UIView 中有一个UILabel 对象。当它的超级视图大小发生变化时,我想让这个标签分别移动。这就像旧的UIViewAutoresizingFlexibleTopMarginUIViewAutoresizingFlexibleRightMarginUIViewAutoresizingFlexibleBottomMarginUIViewAutoresizingFlexibleLeftMargin一样,如果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:自动布局灵活边距的主要内容,如果未能解决你的问题,请参考以下文章

按钮之间的自动布局边距仅在 4" 屏幕上不正确

iOS 自动布局 ios 7 与 ios 8

自动布局 - 带有 ImageView 的 UITableViewCell - 边距?

iOS 7 自动布局与 iOS 8 自适应布局,有区别吗?

自动布局

带有customView的自动布局iOS 11工具栏UIBarButtonItem