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    //调整左边距离、宽度、右边距离。且三者变化比重相同。

 

posted @ 2015-05-11 23:20  Dalink  阅读(228)  评论(0编辑  收藏  举报