在UIView中检测iOS 8的方向变化

6
我在iOS8中使用TraitCollectionDidChange检测常规和紧凑尺寸类。我试图将一组特定的数据水平适应屏幕,但它无法适应竖向iPad Mini上的常规水平类,而在横向则有足够的空间。问题在于,常规水平尺寸类在竖屏和横屏时都是“常规”,因此TraitCollectionDidChange不会触发,我也不会得到关于方向更改的通知。我听说过viewWillTransitionToSize,但它在UIView中不可用。苹果是否表示他们不希望UI布局从常规水平类 - 竖屏和常规水平类 - 横屏中有差异?如果可以,请问我该如何在UIView中得到方向更改的通知?

我认为这并不意味着你不应该针对不同的方向使用不同的布局,但由于你发现尺寸类别过于有限,所以可以使用其他方法来解决问题(无论是否使用尺寸类别)。 - A-Live
那么,我如何在UIView中得知方向变化的情况? - Pat Long - Munkii Yebee
1
您的UIViewController会收到通知,因此可以通知其视图有关新方向的信息。 - ott--
@ott 我希望我不必这样做 :-) - Pat Long - Munkii Yebee
通常,UIView 表示由视图控制器控制的状态。因此是 MVC。方向应该只在视图控制器中检测,并且您可以提供从 UIView 中调用的方法来更改状态。 - Matthew Ferguson
1个回答

14

只需在您的UIView子类中添加方法-(void)layoutSubviews。每当视图的尺寸发生变化时,它都会被调用。不要忘记在新方法内调用[super layoutSubviews]。

然后,您可以检查self.traitCollection.verticalSizeClass和self.traitCollection.horizontalSizeClass以查看您正在查看什么。

-(void) layoutSubviews
{
    [super layoutSubviews];

    //   your code here...
}

当屏幕方向改变但大小保持不变时(例如从右横屏到左横屏),此方法不会被调用。 - Luca Torella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接