我可以轻松地花费数小时(如果不是几天)试图解决这个问题(我已经有好几个小时了!)
我有一个包含子视图的UIView(参见附图),并且在它被添加为任何东西的子视图之前构建。
在某个时间点,我将其作为子视图视图添加到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的维度时)?
答案 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
将相应地调整大小(因为自动调整约束)并且正是您想要实现的目标。