繁体   English   中英

UIView自动调整大小

[英]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 即使在这种情况下也可以工作 ,只要您知道子视图和超级视图之间需要多少间距即可。

例如,您希望v2v1为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM