UIView Autoresizing

时间:2013-07-17 15:25:54

标签: ios uiview autoresize autoresizingmask

我可以轻松地花费数小时(如果不是几天)试图解决这个问题(我已经有好几个小时了!)

我有一个包含子视图的UIView(参见附图),并且在它被添加为任何东西的子视图之前构建。

enter image description here

在某个时间点,我将其作为子视图视图添加到UITableViewCell。我打电话给

[tableViewCell.contentView addSubview:mySubview]
    //....
[mySubview setBounds:tableViewCell.contentView.bounds]

当我开始我的子视图时,我有:

[self setAutoresizesSubviews:YES]

从我的图片中,您可以看到我假设只有宽度发生变化。我需要做些什么才能让mySubview的右侧子视图扩展到全宽,同时保持它的原始来源?

在我的思考中,我很容易接近这一切,我欢迎任何建议!

修改 非常感谢你的帮助,Khanh Nguyen

所以,正如我之前所说,当我初始化v1时,(并且,根据定义v2),我不知道v1的维度。

当我知道我想要放置v1的界限时我假设我可以做这样的事情:

[v1 setBounds:(some CGRECT)];
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

或者我只是在实例化它时立即在v2上设置autoresizingMask(当我还不知道v1的维度时)?

1 个答案:

答案 0 :(得分:2)

如果您有一个视图v1,则其子视图v2并且您希望v2具有固定的左边缘,而当v1调整大小时其宽度会发生变化(即距离在v1的右边缘和v2的右边缘之间是恒定的),请使用:

v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

对于Swift:

v2.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleBottomMargin]

默认情况下,autoresizesSubviews为YES。你不需要设置它。

修改

每个视图都有维度,即使您不知道它(如果您想了解它,只需执行NSLog)。如果视图刚刚初始化,则其尺寸可能是(0,0)。只要你知道子视图和超级视图之间需要多少间距,autoresizesSubviews即使在那种情况下也可以

例如,您希望v2距左边距为v1为10px,右边距为20px,以下情况

// v1 has been initialized, and its dimensions are unknown (to you)
// It's probably (0, 0), but that doesn't matter
// 30px = 10px + 20px
v2.frame = CGRectMake(10, 0, v1.bounds.size.width - 30, 100);
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

注意第三行,如果v2.frame最初为零,则v1将被设置为某些负数,但是当v1的帧设置为适当大小时({由您或UITableViewCell),v2将相应地调整大小(因为自动调整约束)并且正是您想要实现的目标。