IOS开发-12.Autoresizing概述

1.概述

  • 现在iPhone的尺寸在不断的增多,从iPhone4S的3.5寸到iPhone 6+的5.5寸,我们需要做多个屏幕适配,而苹果为了降低适配难度,给我们提供了相关的自动布局技术。
  • Autoresizing技术是IOS自动布局的两大技术之一,另一个是Autolayout技术(IOS6之后推出),Autoresizing是Autolayout的前身,所以功能没有Autolayout强大
  • 早起的Autoresizing只能做到子控件和父控件之间的适配,兄弟控件之间无法适配,所以苹果后续推出了更强大的Autolayout+sizeClasses技术,可以适配所有机型,所以现在autoresizing技术基本使用不到,这里只是作为了解

2.基本使用

  • Xcode6之后,新建的项目都默认是Autolayout模式的,所以我们要想使用Autoresizing,必须先勾选掉Autolayout模式,如下图
    这里写图片描述
  • 右上方的小尺,对比点击前后可以看到如下图
    这里写图片描述这里写图片描述
  • 勾选后是看不到autoresizing属性的,所以这里也可以说明,autolayout和autoresizing不能共用,一次只能使用一者
  • autoresizing默认是左对齐和上对齐的,即途中的左边的正方形方格里面有6根虚线,分别代表的意思如下
    • 1.Autoresizing四周的四根线的作用:
      只要勾选上某一根, 那么当前控件距离父控件的距离就是固定的, 当前是多少, 以后永远都是多少
    • 2.Autoresizing中间两条线的作用:
      只要勾选上水平方向的线, 那么当前控件的宽度就会随着父控件的宽度等比拉伸
      只要勾选上垂直方向的线, 那么当前控件的高度就会随着父控件的高度等比拉伸
      • 3.无论是将子控件固定在父控件的某一个位置
        还是让子控件随着父控件的宽高的变化而变化
    • 4.都是父子关系, 所以Autoresizing只能约束父子控件之间的关系, 不能约束兄弟控件之间的关系
  • Autoresizing属性框右边的图片是预览效果,在我们设定好左边的属性后,将鼠标移动到该图片,则会自动显示白色父视图拉升后红色字视图的变化情况

  • 视图预览功能(强大,强烈推荐),点开故事板,打开辅助编辑器(快捷键command+option+回车键),点击automatic中的preview
    这里写图片描述
    这里写图片描述

  • 出现如上界面,我们点击预览界面中左下角+号,可以添加不同尺寸的iPhone和iPad视图(说明,由于创建项目时选择只是iPhone项目,所以这里只有iPhone的尺寸),用来对比不同尺寸的适配情况

3.用代码实现autoresizing约束

  • 实现添加如下视图的约束
    这里写图片描述
    这里写图片描述
// 在控制器的viewDidLoad方法中添加控件
- (void)viewDidLoad {
    [super viewDidLoad];
    // 1.创建父控件
    UIView *greenView = [[UIView alloc] init];
    greenView.frame = CGRectMake(0, 0, 200, 200);
    greenView.backgroundColor = [UIColor greenColor];
    [self.view addSubview:greenView];
    self.greenView = greenView;

    // 2.创建子控件
    UIView *redView = [[UIView alloc] init];
    redView.frame = CGRectMake(0, 0, 100, 100);
    redView.backgroundColor = [UIColor redColor];
    [greenView addSubview:redView];

    // 3.设置子控件的autoresizing(取值为枚举)
    /*
     注意: 代码中的上下左右和Storyboard中的是相反的
     Storyboard中勾选上左边, 就代表当前控件和父控件的左边的距离是固定的
     而在代码中如果写上FlexibleLeftMargin, 就代表当前控件和父控件的左边是可拉伸的
     换句话说就是: 如果设置了FlexibleLeftMargin, 就代表着右边是固定的

     UIViewAutoresizingFlexibleLeftMargin // 左边可以伸缩
     UIViewAutoresizingFlexibleRightMargin // 右边可以伸缩
     UIViewAutoresizingFlexibleTopMargin // 顶部可以伸缩
     UIViewAutoresizingFlexibleBottomMargin // 底部可以伸缩

     // 以下两个和Storyboard中的是一样的
     UIViewAutoresizingFlexibleWidth // 宽度可以伸缩
     UIViewAutoresizingFlexibleHeight // 高度可以伸缩
     */
    redView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

// 验证当我们点击屏幕改变父控件的尺寸后,子控件能够随父控件的尺寸而拉伸
- (void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
{
    self.greenView.frame =  CGRectMake(0, 0, 300, 300);   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值