我可以很容易地花几个小时(如果不是几天的话)来解决这个问题(我已经花了几个小时!!!)
我有一个包含 subview (见附图)的 UIView,并且是在它作为 subview 添加到任何东西之前构建的。
在某个时间点,我将它作为 subview View 添加到 UITableViewCell。我叫
[tableViewCell.contentView addSubview:mySubview]
//....
[mySubview setBounds:tableViewCell.contentView.bounds]
当我初始化我的 subview 时,我有:
[self setAutoresizesSubviews:YES]
从我的图形中,您可以看到我假设只有宽度发生变化。我需要做什么才能使 mySubview 的右侧 subview 扩展到全宽,同时保持其原始位置?
我很容易在我的想法中完全错误地处理这一切,我欢迎任何建议!
编辑 非常感谢您的帮助,Khanh Nguyen
因此,正如我之前所说,当我初始化 v1 时,(并且根据定义 v2)我不知道 v1 的维度。
当我知道我想要放置 v1 的边界时,我假设我可以做这样的事情:
[v1 setBounds:(some CGRECT)];
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
或者 C 我只是在 v2 实例化后立即在 v2 上设置 autoresizingMask(当我仍然不知道 v1 的尺寸时)?
最佳答案
如果你有 View v1
, 它的 subview v2
你想要v2
具有固定的左边缘,而其宽度在 v1
时发生变化调整大小(即 v1
的右边缘和 v2
的右边缘之间的距离是恒定的),使用这个:
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
对于 swift :
v2.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleBottomMargin]
默认情况下,autoresizesSubviews
是是的。你不需要设置它。
编辑
每个 View 都有维度,即使您不知道(如果您想知道,只需执行 NSLog
)。如果 View 刚刚被初始化,它的维度可能是 (0, 0)。 autoresizesSubviews
即使在那种情况下也能工作,只要您知道 subview 和父 View 之间需要多少间距。
例如,你想要v2
距离 v1
10px左边距为 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
将相应地调整大小(由于自动调整约束)并成为您想要实现的目标。
关于ios - UIView 自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17703925/