【发布时间】:2011-01-07 03:02:39
【问题描述】:
我正在使用 UIView 的子类(以编程方式)包含和管理许多要彼此相邻放置的子视图(主要是 UIImageViews),这样没有一个重叠。可以安全地假设子视图都具有相同的高度(最初绘制时),但宽度不同。容器可能会调整大小,在这种情况下,我希望子视图按比例缩放。此外,有时我需要添加/删除/编辑任何给定的子视图(这可能会改变其宽度)。
我在使用方面取得了一些成功:
[self setAutoresizesSubviews:YES];
[self setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleBottomMargin)];
让容器在其框架发生变化时自动调整其子视图的大小。
不幸的是,当子视图的内容发生变化时,我在处理这种情况时遇到了很多麻烦,导致它变宽或收缩。简单地设置“setNeedsLayout”并为子视图定义“layoutSubviews”似乎并不能解决问题,因为在“layoutSubviews”的开头,子视图的框架尚未调整。如果我强制它,那么当前的内容会被拉伸或收缩,这看起来很糟糕。
如果有人能解释在这种情况下应该如何使用 sizeToFit、layoutSubviews、sizeThatFits:、setAutoresizesSubviews:、setAutoresizingMask: 和 setContentMode:,我将不胜感激。我的意思是,如果我想调整子视图的内容(并扩大它),那么我该怎么做:
- 子视图被加宽(没有不利地拉伸或自动调整其中的任何其他内容)
- 容器按比例加宽
- 其他子视图均不受影响
?
提前致谢!
【问题讨论】: