Size Classes的一个坑

在使用iOS的Size Classes发现了一个坑。
我们先来做个很简单的Demo,storyboard图如下:

Size Classes的一个坑_第1张图片
屏幕快照 2015-04-19 下午8.55.34.png

我们在 ViewController视图里放一个button,点击后push到 OtherViewController里, OtherViewController里有一个tableView, tableView有一个动态cell,cell的顶部有一个红色的UIView。这里我们都用autolayout来做布局。我们运行一下,效果图如下:

Size Classes的一个坑_第2张图片
iOS Simulator Screen Shot 2015年4月19日 下午9.02.34.png

我们看到运行很正常。
那假如我们一开始创建的时候就用Size Classes的wCompact-hRegular类型而非默认的wAny-hAny

Size Classes的一个坑_第3张图片
屏幕快照 2015-04-19 下午9.06.06.png

大家觉得运行效果会跟上面的一样吗?之前我一直认为是一样的,可事实却不是这样的。我们来看下运行效果。

Size Classes的一个坑_第4张图片
iOS Simulator Screen Shot 2015年4月19日 下午9.06.37.png

我们可以看到第一个cell的红色视图被导航栏遮挡住了。
我之所以发现这个问题,是我在工作的时候,要做一个动态cell,里面有的视图有时候有,有时候没有。我以前一直的做法是将要隐藏的视图的高度约束改为0,然后用 - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize来自动计算cell的高度。
可这次却发现这个方法不会计算高度了,每个cell的高度都返回44。又试了好几次还是不行。
决定把计算高度改为手动计算,不过又发现一个小bug,决定将一些有时候有,有时候没有的视图改为用 Masonry来手动写约束。这时候又出现问题了,程序一运行到代码写的约束就会崩溃,说找不到两个视图的父视图。
然后,我写了一个简单的Demo发现这样写是没有问题的,不知道为什么在我的工程里就会出现问题。浪费了好多时间,为了再次确认,我又重写那个简单的Demo发现这个也会崩溃了,我就百思不得其解,同样的代码,同样的约束,为什么这个就运行不起来呢?
我开始挨个对比这两个Demo,无意间发现我两次Demo的Size Classes的类型不同,我把崩溃的那个Demo也改为wAny-hAny,神奇的事情发生了,以前的问题都消失了。
我现在还不清楚为什么会这样,按理说这两种类型应该都没有问题的。不过事实就是这样,我以后工程里都会用默认的wAny-hAny类型了,暂时不再用其他类型。因为这个问题已经耽误了我好几天时间了,我的时间呀,啊啊啊啊啊啊……
如果有人知道原因可以在下面评论下,告诉我。不胜感激。

你可能感兴趣的:(Size Classes的一个坑)