[Cocoa]viewController不响应横竖屏转换相关消息的问题

本文探讨了在iOS应用中,当一个viewController(B)作为另一个viewController(A)的子视图时,为何B无法接收到屏幕旋转消息的问题。文章给出了三种解决方案:一是将B加入到控制器导航层级中;二是由A显式调用B的所有旋转相关方法;三是在A的layoutSubviews中调用B的layoutSubviews以调整布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

viewController不响应横竖屏转换相关消息的问题

罗朝辉 (http://www.cnblogs.com/kesalin/)

本文遵循“ 署名-非商业用途-保持一致”创作公用协议

 

有同学在 CocoaChina 上提出这样一个问题:A viewController 中包含一个 B viewController(B 的 view 作为 A 的 view 的 subView),在横竖屏转换时,A 可以得到屏幕旋转相关的消息(如:shouldAutorotateToInterfaceOrientation),而 B 却得不到,即使 A,B 都实现了这些函数。原贴见这里:http://www.cocoachina.com/bbs/read.php?tid=40973&page=1#393765

 

这个问题我以前也碰到过,稍微研究了一下,其原因是 A 是在 AppDelegate 里 window 的 controller 层次体系中(比如,是 navigation push进去的等等),而 B 只是创建出来,让 A 方便使用其 view 而已,B 并没有加入这个层次体系中( B 的 parentViewController 为 nil,哪怕 B.view.superview 是 A.view)。所以 A 会跟着那个层次体系得到系统旋转相关的消息,而 B 被凉在一边,得不到相关消息。

 

解决办法有三个方案:

第一,是将 B 加入 controller 导航层次中去;

第二,是在 A 中实现所有旋转相关的消息,并在 A 相应实现的消息中,显式调用 B 对应的相关消息;

第三,是在 A 的 layoutSubviews 中显式调用 B 的 layoutSubviews 函数,在 B 的 layoutSubviews 消息实现里,根据 statusBar 的 orientation 来调整其布局。这种方法只是调整 B 的布局而已,不会真的改变 B 的 orientation 属性值。

转载于:https://www.cnblogs.com/kesalin/archive/2011/07/18/viewController_response_to_rotation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值