我是可可和相关的新手。为ipad编程。
我已经构建了一个具有拆分视图控制器的应用程序。在详细视图中是一个工具栏,上面有一个按钮。按下按钮时,拆分视图控制器将从超视图中删除,另一个视图将放置在其位置。此新视图上的工具栏按钮将删除视图并将拆分视图放回原位。效果很好......除非在第二个视图可见时旋转ipad。当用户返回拆分视图时,它显示为旋转前的状态。
拆分视图和所有子视图都设置为autoresize = yes,并在收到autorotatetointerfaceorientation消息时返回yes。
我猜我需要告诉拆分视图及其子视图在我将其作为子视图添加到窗口时自行调整大小。
由于 克里斯
答案 0 :(得分:0)
好的,我知道可能有用的东西:不要从视图层次结构中删除UISplitViewController的视图。相反,要么在其上放置视图,请将其视图的alpha
属性设置为0,或将其视图的hidden
属性设置为YES。
答案 1 :(得分:0)
请在此处查看有关此事的问题:
Best way to switch between UISplitViewController and other view controllers?
如果你像Apple那样使用UISplitViewController,那么它非常有限。
我最终完全按照你的提议使用策略 - 即从UIWindow中删除UISplitViewController的视图,然后替换为另一个,然后再切换回来。我发现方向改变WAS处理,即使我在呈现视图B时旋转(B是非拆分视图),然后切换回A(拆分视图)。但是,我不得不对uisplitview的帧大小进行一些调整以使其工作。我会在以后更新时更新信息。
还可以选择编写自己的拆分视图控制器,或使用其他人的重新实现,例如:
http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad
<强>更新强>
我在AppDelegate中的以下方法中可以看到我对UISplitView的帧大小所做的小事。这些方法用于通过替换UIWindow下的另一个顶级视图控制器来呈现拆分视图控制器:
- (void)removeAllWindowSubviews {
for (UIView *childView in window.subviews) {
[childView removeFromSuperview];
}
}
- (void)presentSplitView:(UISplitViewController *)vc {
[self removeAllWindowSubviews];
UIView *viewForSplitVC = vc.view;
// fix for deficiency in adding a split view controller's view in landscape mode
// and it still having a frame for portrait mode.
// 2010-10-15 added -20.0f to fix problem with toolbar in LHS VC being 20 pix too low.
viewForSplitVC.frame = CGRectMake(viewForSplitVC.frame.origin.x, viewForSplitVC.frame.origin.y,
navigationController.view.bounds.size.width, navigationController.view.bounds.size.height - 20.0f);
[window addSubview:viewForSplitVC];
}
// for removing the split view and restoring the other main VC
- (void)restoreMenu {
if (isIPad()) {
[self removeAllWindowSubviews];
[window addSubview:navigationController.view];
}
}
正如我所说,这是一个黑客攻击,但是框架的修正使我能够呈现拆分VC而其框架有时不正确。正如我之前提到的那样,通过做这些事情,我们会走出苹果公司希望我们做的事情,因此涉及到这些问题。