gpt4 book ai didi

iphone - UINavigationController 堆栈中的 UIViewController 方向更改

转载 作者:行者123 更新时间:2023-12-03 18:47:03 26 4
gpt4 key购买 nike

我有一个 UINavigationController,上面有两个 UIViewController(A 和 B)。我从 A 将 B 压入堆栈。然后用户重新定向设备。我需要在屏幕上移动一些东西(按钮等),以便在 A 上的新方向上可见。

我发现 -shouldAutorotateToInterfaceOrientation 在 A 和 B 上都被调用(并返回 YES)。但是 -will/-didRotateFromInterfaceOrientation 只会在可见的 ViewController (B) 上被调用。当 B 从堆栈中弹出时,A 以新的(正确)方向显示,但按钮不会根据需要移动。

为了解决这个问题,我发现自己实现了以下模式:

在头文件中:

@interface A : UIViewController {
// ...
UIInterfaceOrientation layoutOrientation;
}
// ...
- (void)orientationChanged;
@end

在.m文件中:

- (void)viewDidLoad {
// ...
layoutOrientation = self.interfaceOrientation;
}

- (void)viewWillAppear:(BOOL)animated {
// ...
if (layoutOrientation != self.interfaceOrientation) {
[self orientationChanged];
}
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self orientationChanged];
}

- (void)orientationChanged {
// move my buttons
layoutOrientation = self.interfaceOrientation;
}

本质上,我正在检查 -viewWillAppear 中的方向是否发生变化,并在需要时更新 UI。它工作得很好,但这似乎(a)乏味,(b)我的各个类(如 A)中有很多重复的代码。我可以通过将代码移动到公共(public)父类(super class)来修复(b),但这看起来仍然像一些东西我不应该这么做。

是否有更好的方法可以在导航堆栈上非最顶层的 View 上移动按钮?如果 IB 中有什么我需要检查的内容,我的观点来自 .xibs。我是否应该设计我的 View ,以便它们在方向改变时不需要移动按钮?

谢谢!

最佳答案

我更喜欢在 -layoutSubviews 中进行尽可能多的布局;有多种方法可以检测方向,但我只是将bounds.size.width与bounds.size.height进行比较。

willAnimateRotationToInterfaceOrientation:duration: 更适用于“特殊”动画,例如将 View 从底部滑出并从侧面滑入。

将其与 Nib 布局结合起来是很乏味的。最近,我刚刚在 Nib 中模拟了纵向 UI,直到它运行良好,然后编写了等效的代码来执行相同的操作,但也支持横向。

关于iphone - UINavigationController 堆栈中的 UIViewController 方向更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com