ios – 强制视图上的特定大小类

我认为iPad和iPad之间需要不同的约束. iPhone版.

登录屏幕在iPhone和iPhone上以全屏显示.在iPad的页面表格中.由于尺寸的原因,UITextFields距离iPhone的右侧和左侧40像素,但我希望它们在iPad上为80像素.我将其设置为最终值大小类(w Regular,h Regular)的特定约束.

但是,因为此视图显示页面表上,所以它不使用最终值大小类.理想情况下,我想“强制”视图使用大小类,而不是拥有一组iPhone / iPad约束和许多约束Outlets.

解决方法

这意味着要完成的方法是使用 UIViewController上的特征集合,通过调用-setoverrideTraitCollection:forChildViewController:.

但是,正如API标题所示,UIViewController只能通过其父级覆盖其traitCollection.呈现的视图控制器不是其父级的子级(头文件特别注释显示的视图控制器不包含在子视图控制器中),因此您必须添加“ToPresentViewController”.

在这个例子中,在IB中有ToPresentViewController场景,它只是一个容器ViewController连接到它的边,约束为0,以及将被嵌入的视图控制器.

@implementation ToPresentViewController


-(void)traitCollectionDidChange:(uitraitcollection *)prevIoUsTraitCollection {
    [super traitCollectionDidChange:prevIoUsTraitCollection];

    if(thisDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)
    {
        return;
    }

    for (UIViewController *controller in self.childViewControllers) { //Should be only one
        uitraitcollection *regularWidthTraits = [uitraitcollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
        [self setoverrideTraitCollection:regularWidthTraits forChildViewController:controller];
    }

}

这将在iPad上将大小类锁定为常规.

编辑:WWDC sample code here建议表明只需要提供被覆盖的特征,这是有道理的,因为在旧的新合并集合的原始答案中,不清楚它是如何知道使用的.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...