我正在使用UIView的子类(以编程方式)包含和管理许多子视图(主要是UIImageViews),这些子视图彼此相邻,使得没有任何重叠。可以安全地假设子视图具有相同的高度(最初绘制时),但宽度不同。容器可能会调整大小,在这种情况下,我希望按比例缩放子视图。此外,有时我需要添加/删除/编辑任何给定的子视图(可能会改变其宽度)。
我在使用方面取得了一些成功:
[self setAutoresizesSubviews:YES];
[self setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleBottomMargin)];
让容器在其框架更改时自动调整其子视图的大小。
不幸的是,当子视图的内容发生变化,导致它变宽或收缩时,我遇到了很多麻烦。简单地设置'setNeedsLayout'并为子视图定义'layoutSubviews'似乎没有办法,因为在'layoutSubviews'的开头,子视图的框架尚未调整。如果我强迫它,那么当前的内容会被拉伸或收缩,这看起来很糟糕。
如果有人能解释一下sizeToFit,layoutSubviews,sizeThatFits:,setAutoresizesSubviews:,setAutoresizingMask:和setContentMode:应该在这种情况下使用,我当然感激不尽。我的意思是,如果我想调整子视图的内容(并加宽它),那么我该怎么做呢:
提前致谢!
答案 0 :(得分:1)
我最终选择了手动路线,使用sizeThatFits:和layoutSubviews来显式控制重绘和组织所有内容的方式。我发现setAutoresizesSubviews:和setAutoresizingMask:帮助进行简单的布局,但是如果我尝试了一些甚至是非常典型的东西,那就很难调试。
我的建议:您第一次尝试编程布局时,为所有(子)视图定义sizeThatFits,并为每个视图定义layoutSubviews。使用调试语句记录所有内容的位置。一旦您满意,请考虑将自动调整功能简化为代码(如果可能)。
答案 1 :(得分:0)
为了调整视图大小的动画,请执行以下操作:
[UIView beginAnimations:@"resizeAnimation" context:nil];
youView.frame = newFrame;
[UIView commitAnimations];
如果您不希望元素自动调整大小,只需将其自动调整大小设置为UIViewAutoresizingNone
。
如果我的案例正确无误,除了您提到的子视图外,您不希望封面及其子视图自动调整大小。该视图应该启用一些自动调整选项(我不知道你想要的那些,只是尝试一些并看到它们的效果)。该子视图还应该禁用其子视图大小调整。