IOS-UIview的AutoresizingMask自动伸缩解析(主要处理UIView加载出来看不见的问题)

在iOS开发中,当A控制器模态跳转到B控制器,并在B控制器中添加子控制器C时,发现C的view在B中不可见。原因是Xcode6后,默认控制器view尺寸为600x600,系统会自动伸缩以适应屏幕。C的view由于比例缩放变为一条线。解决方案包括:1) 设置view尺寸避免系统默认伸缩;2) 将view的autoresizingMask设为UIViewAutoresizingNone,阻止自动伸缩。

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

今天在做控制器跳转的时候遇到一个问题:

1.当A控制器跳转B控制器(modal跳转

2.B控制器中添加一个子控制器C,

3.设置了C控制的view的frame,但B控制器中看不见C控制器的view。


主要问题出现在第三步,看不见C控制器的VIEW,而已经设置了C控制器的view的frame,通过XCode的图形界面调试功能发现C控制器的VIEW已经被缩放成一条线,所以在界面上肉眼无法看见。


下面给出问题产生的原因及解决方式


原因:我们知道在Xcode6以后,苹果为让大家更好使用autolayout布局,不管是XIB还是storyboard,初始的控制器的view都是600*600的大小,如果不手动设置size,默认属性Inferred,控制器的默认view的尺寸就是600*600,设置属性如下图

而如果使用的默认size,系统会在加载此view的时候对view进行自动伸缩来匹配模拟器的屏幕尺寸。

因此可以发现,要使view自动伸缩肯定是view的autoresizingMask属性做了操作,所以得知在默认情况下,所有控制器view的autoresizingMask属性都包含了UIViewAutoresizingFlexibleWidth和UIViewAutoresizingFlexibleHeight两个值,这两个值就是对view的宽高进行比例缩放,而添加到父控制器中的子控制器的view也会根据600*600的大小进行比例缩放

假如子控制器中的view的宽高为100*100,我们用iPhone5S的模拟器,屏幕为4.0寸,宽高为320*568,view在显示的时候,会从600*600的尺寸缩放到320*568,子控制器中的view也会跟着缩放,最后成为一条线,肉眼无法看见。


解决方法1:在xcode中为view设置尺寸,只要设置了尺寸,系统不会对autoresizingMask进行默认操作


解决方法2:让view的autoresizingMask = UIViewAutoresizingNone;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值