UIView的autoresizingMask属性探究

本文详细介绍了UIView的autoresizingMask属性,解释了如何通过不同的枚举值实现子视图随父视图尺寸变化时的位置和大小调整。从单一到组合属性的应用,展示了多种布局效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 UIView的autoresizingMask属性,是用在当一个UIView实例的父控件的尺寸发生变化时,来自动调整UIView实例在父控件中的位置与尺寸的。autoresizingMask属性是一个枚举值,它的枚举成员如下:

  它通过使UIView的上、下、左、右、宽度或高度自动变化来调整。下面分几种情况来讨论这个属性,假设父控件为backgroundView,子控件为subView:

 

1、当没有使用autoresizingMask属性或autoresizingMask属性的值为UIViewAutoresizingNone的时候,autoresizingMask属性不起作用。此时当backgroundView变化的时候,subView并没有任何反应(frame不变),如下图:

 

 

2、当设置subView. autoresizingMask=UIAutoresizingFlexibleBottomMargin或设置subView. autoresizingMask=UIAutoresizingFlexibleRightMargin的时候,发现效果和没有设置一样;

 

3、当设置subView. autoresizingMask=UIAutoresizingFlexibleLeftMargin的时候,效果如下图:

 

 

4、当设置subView. autoresizingMask=UIAutoresizingFlexibleTopMargin的时候,效果如下图:

 

 

5、然后看一看组合的情况,多个autoresizingMask属性可以通过“|”组合起来,共同作用。比如当subView. autoresizingMask=UIAutoresizingFlexibleLeftMargin | UIAutoresizingFlexibleTopMargin的时候,效果如下图:

 

可以看到subView在不断改变left和top方向上和backgroundView的距离,出现了subView一直紧跟着backgroundView右下角的效果;

 

6、当subView. autoresizingMask=UIAutoresizingFlexibleTopMargin | UIAutoresizingFlexibleBottomMargin的时候,效果如下图:

 

可以看到subView在不断改变top和bottom方向上和backgroundView的距离,出现了subView一直在垂直方向上居中的效果;

 

7、如果同时使用4个margin属性,会有以下效果:

 

可以看到subView在不断改变4个方向上和backgroundView的距离,出现了subView一直居中的效果;

 

8、由此可知:使用margin类的枚举成员的时候,subView对应方向的边会自动灵活调整和backgroundView相应边的距离,但是subView的尺寸是不变的。所以,在这个过程中,subView的frame.origin可能会变化,而frame.size不变;

 

9、接下来当subView. autoresizingMask=UIAutoresizingFlexibleWidth的时候,效果如下图:

 

 

10、当subView. autoresizingMask=UIAutoresizingFlexibleHeight的时候,效果如下图:

 

 

11、共同使用width和height两个枚举成员的这种组合方式是非常常见的,它的效果如下图:

 

可以看到,subView在不断改变自己的尺寸,保持4个方向上和backgroundView的距离不变,出现了subView一直居中并跟着backgroundView变化的效果;

 

12、由此可知:使用width和height两个枚举成员的时候,subView会通过变换尺寸来使对应方向上的边与backgroundView的距离保持不变。即是在这个过程中,subView的frame.origin不变,而frame.size会改变;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值