UIView---AutoresizingMask备忘
1、介绍
UIView的控件树结构时app界面的层次结构,子View在父视图中的位置由frame属性改变。当父视图改变时,子视图的frame并不会变化。但是一个UIView的bounds往往是多变的,经常面对子view在父视图中的相对位置。如果每次父视图的bounds改变时重新计算子view的frame,这无疑是件很麻烦的事情。UIView的autoresingMask属性就是为了协助开发人员,快速处理子view在父视图中的位置依赖问题。
2、用法
父UIView的autoresizesSubviews属性决定着父UIView是否控制子UIView的frame。当autoresizesSubviews为YES时,父视图的bounds一旦改变,则父视图会按照着既定规则调整子UIView的frame。这个既定规则就是由子View的autoresizingMask属性控制。创建一个简单的演示Demo。
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _backView.autoresizesSubviews = YES; _containerView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; } - (IBAction)sliderValueChange:(UISlider *)sender { float value = sender.value; CGRect newFrame = _backView.frame; sender.tag == 0?(newFrame.size.width = value):(newFrame.size.height = value); _backView.frame = newFrame; } @end
3、autoresizingMask可选项解析
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, //没有自动调整 UIViewAutoresizingFlexibleLeftMargin = 1 << 0, //调整左边距离,保持宽度和右边距离不变 UIViewAutoresizingFlexibleWidth = 1 << 1, //调整宽度,保持左边和右边距离不变 UIViewAutoresizingFlexibleRightMargin = 1 << 2, //调整右边距离,保持宽度和左边距离不变 UIViewAutoresizingFlexibleTopMargin = 1 << 3, //调整顶部距离,保持高度和底部距离不变 UIViewAutoresizingFlexibleHeight = 1 << 4, //调整高度,保持顶部和底部距离不便 UIViewAutoresizingFlexibleBottomMargin = 1 << 5 //调整底部距离,保持高度和顶部距离不变 };
4、效果的组合
UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin //调整左边和右边距离,保持宽度不变。左边和右边距离变化比重相同。
UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleRightMargin //调整左边距离、宽度、右边距离。且三者变化比重相同。