使用XIB和自动布局操作视图层次结构

时间:2013-05-28 22:05:16

标签: ios uiscrollview autolayout

我想要完成的事情看起来很简单,但我已经在这一整天了,我无法理解。

我有一个故事板(尚未使用自动布局)和一个具有分页滚动视图的场景。我还有2个XIB,我在代码中实例化。第一个XIB(A)具有UILabel和通用UIView。第二个XIB(B)在+排列中只有5 UIButton s。最终目标是将B加载到A中的通用视图中(水平居中,标签下方的“默认值”),并使A在滚动视图中占据整页。

当我调整XIB A的视图大小时,通用视图的大小会扩展和缩小,但始终保持标签下方的默认值。当我调整XIB B的视图大小时,按钮排列保持居中(这是我想要的)。这是我想要的行为。

但是,使用以下代码,它不起作用:

View A *viewA = [[ViewA alloc] initWithFrame:CGRectZero];
viewA.textLabel.text = @"A label with a rather long text";

ViewB *viewB = [[ViewB alloc] initWithFrame:CGRectZero];

[viewA setTranslatesAutoresizingMaskIntoConstraints:NO];
[viewB setTranslatesAutoresizingMaskIntoConstraints:NO];

[viewA.customView addSubview:viewB]; // customView is the generic view

这给了我以下内容:

enter image description here

(白色区域是滚动视图,红色区域视图A,绿色区域视图B。)

我尝试添加一个约束,让视图B占据其超级视图的整个宽度:

[viewA.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[viewB]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(viewB)]];

但结果就是:

enter image description here

如何让按钮在绿色区域居中?我不在乎绿色区域是否被红色区域完全覆盖,或者红色区域是否位于绿色区域的中心。

1 个答案:

答案 0 :(得分:0)

你提到在xib中没有使用自动布局,所以我认为在代码中添加约束没有效果。您应该尝试使用适当的AutoresizingMasks来添加代码中添加的视图。尝试在xib中使用自动布局(正确),除非有充分理由不这样做。

下面是一个掩码的例子,你需要弄清楚你需要哪些,不能通过你的例子说明。

yourView.translatesAutoresizingMaskIntoConstraints = NO;
[yourView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];