Fra*_*gel 4 layout ipad ios ios8 size-classes
iOS 8 Apple引入了用于处理应用程序布局的大小类.不是根据设备,屏幕大小和方向设计用户界面,而是鼓励开发人员根据活动大小类调整其应用程序的布局.我认为这是一个很好的举动.
然而,当涉及到iPad时,似乎没有办法区分不同的设备方向(在我看来,它提供了截然不同的屏幕空间和处理).从人机界面指南:
如果我只想以横向方式呈现侧边菜单,我现在该怎么办,因为它提供了更多的空间,比如UISplitViewController?
是UISplitViewController另一种情况下苹果也不吃它自己的狗食和使用了一些其他指标,如设备的方向或实际屏幕宽度来确定布局?或者还有另一种官方方式吗?在没有代码的情况下,我可以在Interface Builder中做些什么?
(不,我不想UISplitViewController因为几个原因而使用.)
这就是我解决你遇到的问题的方法:
使用不同的大小类来添加纵向和横向的约束(您似乎正在执行此操作),然后IBOutletCollection为基于方向的每个尺寸类创建约束.
例如,我使用wAnyhRegular设置我的纵向iPad布局,然后使用wRegularhAny设置我的横向iPad布局.(虽然您可能希望使用wRegular/hRegular作为您的方向布局之一,因为当您检查时,iPad会注册为wRegular/hRegular UITraitCollection.希望下面的代码演示了我如何去做:
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *iPadPortraitConstraints;
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *iPadLandscapeConstraints;
Run Code Online (Sandbox Code Playgroud)
我的肖像限制可以在下面看到.我的风景也有3个限制.

然后我应用如下所述的约束(未显示,viewDidLoad执行_needsiPadConstraintsApplied = YES;):
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
[self applyiPadConstraints];
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Size Classes does not support differentiating between iPad Portrait & Landscape.
// Signal that the iPad rotated so we can manually change the constraints.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
_needsiPadConstraintsApplied = YES;
}
}
- (void)applyiPadConstraints {
if (_needsiPadConstraintsApplied) {
if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation)) {
[NSLayoutConstraint deactivateConstraints:self.iPadLandscapeConstraints];
[NSLayoutConstraint activateConstraints:self.iPadPortraitConstraints];
} else {
[NSLayoutConstraint deactivateConstraints:self.iPadPortraitConstraints];
[NSLayoutConstraint activateConstraints:self.iPadLandscapeConstraints];
}
_needsiPadConstraintsApplied = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |