我在我的应用中使用了UISplitViewController。这在iPad上可以很好地工作,其中主要和次要总是可见的,并且它在大多数iPhone上工作得很好,它就像UINavigationController一样。
在iPhone 6+和6S +上,分割视图就像是纵向的iPhone,就像风景中的iPad一样。这种景观分裂导致了我的问题,我想避免它。
有没有办法阻止UISplitViewController在iPhone 6+环境中显示主控制器和辅助控制器?我只是想让它显示辅助控制器,就像它对其他iPhone一样。
感谢。
答案 0 :(得分:3)
我能够通过继承UISplitViewController然后覆盖特征集合来执行此操作,以在设备不是iPad时返回紧凑的水平尺寸类。我知道现在检查界面成语是一种失礼,但我不知道该怎么做。
我只是将这个方法添加到我的UISplitViewController子类中:
-(UITraitCollection *)traitCollection {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return [super traitCollection];
} else {
return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
}
}
任何有关更好方法的建议当然是受欢迎的。
答案 1 :(得分:2)
以下是Swift中的相同答案,但也有一个修复,其中垂直尺寸类在手机横向错误:
if($(this).is(':first-child')) {
$(this).addClass("success");
}
答案 2 :(得分:1)
我在UINavigationControllers上无法正确显示上述代码时遇到了一些问题。这是对我有用的方法(快速5):
1)创建一个包含UIContainerView的UIViewController
2)将UISplitViewController嵌入该容器中
3)添加以下代码:
class SplitViewContainerViewController: UIViewController {
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if UI_USER_INTERFACE_IDIOM() != .pad {
performOverrideTraitCollection()
}
}
private func performOverrideTraitCollection() {
for childVC in self.children {
setOverrideTraitCollection(UITraitCollection(horizontalSizeClass: .compact), forChild: childVC)
}
}
}
4)将包含容器视图的视图控制器设置为SplitViewContainerViewController
针对iOS 13的更新
上面的代码在iOS 13上不再起作用。在SplitViewContainerViewController类上使用以下代码代替:
override func overrideTraitCollection(forChild childViewController: UIViewController) -> UITraitCollection? {
if UIDevice.current.userInterfaceIdiom != .pad {
return UITraitCollection(horizontalSizeClass: .compact)
} else {
return super.traitCollection
}
}