在视图上强制指定大小类别

我有一个视图,需要iPhone版本的iPad &之间的不同约束。在视图上强制指定大小类别

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

但是,由于此视图出现在页面上,因此它不使用最终值大小类。理想情况下,我想“强制”视图使用尺寸类,而不是有一系列iPhone/iPad约束和大量约束Outlet。

回答:

这意味着要完成的方式是与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建议表示只需要提供重写的特征,这是有道理的,因为在旧的+新的合并集合的原始答案中,它不清楚它如何知道使用哪一个。

回答:

这意味着要完成的方式是与UIViewController特征集合,很容易通过调用-setOverrideTraitCollection:forChildViewController:

这意味着你需要让你的视图实际上是一个显式的子视图控制器,这已经被推荐了一段时间(并且实际上可以在其他方面是有益的),我认为它可能是自动的,但如果没有,父/子关系可以很好地融合呈现/呈现的视图控制器关系。

您还需要确保创建特质收集正确的,这是在引进的UITraitCollection Class Reference

编辑描述:This answer by Nick Lockwood,谁写Core Animation的高级技术说,“这就是它不是如何的应该被使用“,但答案是从2012年/ iOS 5,并从那时起,View Controller演示文稿已经过简化,并且已经引入了大小类(以及专门用于覆盖它们的方法)。

我认为你可以使视图控制器成为孩子,并且在你展示之前或之前使用-setOverrideTraitCollection:forChildViewController:。在最糟糕的情况下,您可以创建一个通用的UIViewController,并将其作为一个小孩嵌入其中并呈现出来。让我们知道这些技术是否适用于您。

以上是 在视图上强制指定大小类别 的全部内容, 来源链接: utcz.com/qa/266400.html

回到顶部