谁能给我一个详细的解释,为什么 iOS 在处理框架和转换方面的方式是横向的?
我所说的是通过在各种视图生命周期方法中记录视图描述来显示以下行为:
viewDidLoad: "UIView: 0x1edb5ba0; frame = (0 0; 568 320); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewWillAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewDidAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
这种影响是微妙的,但非常耐人寻味。
例如,我使用初始界面方向启动我的应用程序,支持的界面方向都设置为“横向(右主页按钮)”
然后我像这样显示我的 rootViewController:
self.viewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
self.window.rootViewController = self.viewController;
这个 .xib 的方向设置为横向,框架设置为 0、0、568、320。它显示正确,我可以触摸屏幕上的所有点。
当我呈现这样的子视图时,问题就来了:
SomeView *someView = [[SomeView alloc] initWithFrame:self.view.frame];
[self.view addSubview:someView];
此时,self.view.frame 报告为 (0 0; 320 568),self.view.transform 报告为 transform = [0, 1, -1, 0, 0, 0]。最好的情况,最终结果是我只能触摸我刚刚显示的视图的左侧 320px,最坏的情况是视图的布局被屠杀了。
由于各种 SO 问题,我了解到正确的方法如下:
SomeView *someView = [[SomeView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:someView]
我还没有了解到为什么,我对此非常好奇。
我更好奇的是为什么视图在实例化和显示过程中被操纵。
自从我纠结于一个仅限风景的应用程序以来已经有一段时间了,但出于某种原因,我认为当前的实现与早期版本的 iOS 不同,对吗?