这可能吗?我怎样才能做到这一点?
Not possible according to Apple Docs.
可能这个词可能需要一个星号。看起来 Apple 并没有设想(或想要)你这样做。但是,根据您的要求,可能会有一种解决方法。
免责声明:这是一种黑客行为。我并不是说这是一个好的 UI,只是想向 Eli 展示什么是可能的。
我构建了一个示例,从用于构建选项卡式应用程序的 Xcode 模板开始。它有两个 View Controller :FirstViewController
和 SecondViewController
。我决定将 FirstViewController
设为仅横向 View 。在 Interface Builder(Xcode UI 设计模式)中,我将 FirstViewController View 的方向设置为横向,并将其尺寸设置为 480 宽 x 251 高(这里我假设 iPhone/iPod)。
现在,似乎有必要让所有标签栏的 View Controller 声称支持自动旋转到纵向和横向。例如:
- (BOOL)shouldAutorotateToInterfaceOrientationUIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
所以,我的两个 View Controller 都有相同的代码。但是,我在 FirstViewController
中所做的也是覆盖 willAnimateToInterfaceOrientation:duration:
并且基本上 undo 什么是 UIViewController
基础设施确实如此,仅适用于这个仅横向 View Controller 。
FirstViewController.m:
- (void)willAnimateRotationToInterfaceOrientationUIInterfaceOrientation)interfaceOrientation durationNSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration];
CGAffineTransform viewRotation;
CGRect frame;
if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
viewRotation = CGAffineTransformIdentity;
// TODO: change to dynamically account for status bar and tab bar height
frame = CGRectMake(0, 0, 480, 320 - 20 - 49);
} else {
viewRotation = CGAffineTransformMakeRotation(M_PI_2);
// TODO: change to dynamically account for status bar and tab bar height
frame = CGRectMake(0, 0, 320, 480 - 20 - 49);
}
// undo the rotation that UIViewController wants to do, for this view heirarchy
[UIView beginAnimations"unrotation" context: NULL];
[UIView setAnimationDuration: duration];
self.view.transform = viewRotation;
self.view.frame = frame;
[UIView commitAnimations];
}
您得到的结果是标签栏将始终随设备旋转。这可能是一个要求,让您的双方向 View (例如 SecondViewController
)进行自动旋转。但是,FirstViewController
的实际 View 内容现在不会旋转。无论用户如何转动设备,它都会保持横向。那么,也许这对您来说已经够用了?
还要注意:
1) 我更改了应用的 info plist 文件以将 initial 方向设置为横向(因为我的 FirstViewController
是横向的):
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
2) 在 FirstViewController.xib 中,我将主/父 UIView
设置为 不自动调整 subview 。根据您的 View 层次结构,您可能也希望在其他 subview 中更改此属性。您可以尝试该设置。
现在,横向 View 的可用大小确实会发生一些变化,因为状态栏和标签栏会旋转。因此,您可能需要稍微调整布局。但是,基本上,无论用户如何拿着他们的设备,您仍然会获得一个宽 View 来显示横向内容。
Watch Youtube demo of running app
关于iphone - 仅允许在 UITabViewController 中将一个选项卡的方向更改为横向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10889728/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |