今天在做控制器跳转的时候遇到一个问题:
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;