UIViewのautoresizingMask

3055 ワード

[iOS/Swift/OC開発交流群|127183325]交流学習へようこそ
iOSには2つの自動レイアウトがあります.
  • autoresizing
  • autolayout、このレイアウトはiOS 6以降に追加された
  • です.
    AutoresizingMaskはUIViewの属性で、使いやすいです.アプリケーションのインタフェースが簡単であれば、autoresizingを使用して自動レイアウトを行うことができます.
    UIViewAutoresizingは列挙タイプで、デフォルトタイプは自動レイアウトをしないUIViewAutoresizingNoneです.
    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
    };
    

    これらのプロパティの意味を1つのテーブルで説明します.
    属性値
    意味
    UIViewAutoresizingNone
    自動レイアウトは行わず、親ビューの変更に従って変更されません.
    UIViewAutoresizingFlexibleLeftMargin
    親ビューの左からの距離を自動的に調整し、右からの距離を維持します.
    UIViewAutoresizingFlexibleWidth
    自分の幅を自動的に調整し、親ビューの左右の余白と変わらないようにします.
    UIViewAutoresizingFlexibleRightMargin
    親ビューから右への距離を自動的に調整し、左への距離を一定に保つ
    UIViewAutoresizingFlexibleTopMargin
    親ビューの上からの距離を自動的に調整し、下からの距離を一定に保つ
    UIViewAutoresizingFlexibleHeight
    高さを自動調整し、上と下を一定に保つ
    UIViewAutoresizingFlexibleBottomMargin
    親ビューとの下マージンを自動的に調整し、上マージンを一定に保つ
    これらのプロパティは、次のように組み合わせて使用できます.
    UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin
    

    viewの幅は親ビューの変化に伴って自動的に調整され、親ビューとの下辺距離は自動的に調整され、親ビューとの上辺距離は変わらない.
    注意:
    UIViewのautoresizesSubviewsプロパティがYESの場合、上記のプロパティが有効になります.デフォルトはYESです.
    コードを添付して、効果を確認します.
    //
    //  ViewController.m
    //  HPSwitchViewDemo
    //
    //  Created by     on 16/10/10.
    //  Copyright © 2016     . All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (nonatomic, weak) UIView *myView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        //  view       
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 300, 300)];
        view.backgroundColor = [UIColor blueColor];
        [self.view addSubview:view];
        view.autoresizesSubviews = YES;
        self.myView = view;
        
        //   
        UIView *view0 = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 150, 150)];
        view0.backgroundColor = [UIColor greenColor];
        view0.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        [view addSubview:view0];
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        CGRect frame = self.myView.frame;
        frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width-10, frame.size.height);
        self.myView.frame = frame;
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    

    現在のコードでは、クリックすると親ビューの幅が小さくなり、子ビューは親ビューとの左右の余白を一定に保つために、親ビューが小さくなるにつれて幅が小さくなります.