4

我可以很容易地花几个小时(如果不是几天的话)试图解决这个问题(我已经花了几个小时了!!!)

我有一个 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 后立即在 v2 上设置 autoresizingMask(当我仍然不知道 v1 的尺寸时)?

4

1 回答 1

2

如果你有一个 view v1,它的子视图v2并且你想v2有固定的左边缘,而它的宽度在v1调整大小时会发生变化(即v1' 的右边缘和v2' 的右边缘之间的距离是恒定的),使用这个:

v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

对于斯威夫特:

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

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

编辑

每个视图都有尺寸,即使你不知道(NSLog如果你想知道就做)。如果视图刚刚被初始化,它的尺寸可能是 (0, 0)。即使在这种情况下也可以autoresizesSubviews工作,只要您知道子视图和父视图之间需要多少间距。

例如,您希望左边距v2为 10px,v1右边距为 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' 的框架设置为适当的大小(由UITableViewCellv2或你想达到什么。

于 2013-07-17T16:27:14.647 回答