[英]UIView Autoresizing
我可以轻松地花几个小时(如果不是几天的话)来解决这个问题(我已经花了几个小时了!!!)
我有一个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;
还是CI实例化后立即在v2上设置了autoresizingMask(当我仍然不知道v1的尺寸时)?
如果您有一个视图v1
,其子视图v2
并希望v2
具有固定的左边缘,而其宽度在调整v1
的大小时会发生变化(即v1
的右边缘与v2
的右边缘之间的距离是恒定的),请使用以下方法:
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
对于Swift:
v2.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleBottomMargin]
默认情况下, autoresizesSubviews
为是。 您不需要进行设置。
编辑
每个视图都有尺寸,即使您不知道也是如此(如果您想知道,只需执行NSLog
)。 如果视图刚刚被初始化,则其尺寸可能为(0,0)。 autoresizesSubviews
即使在这种情况下也可以工作 ,只要您知道子视图和超级视图之间需要多少间距即可。
例如,您希望v2
距v1
为10像素(对于左边距为20px),对于右边距为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
将相应调整(因为自动调整大小约束),并成为您想要实现的目标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.