JiongXing / PhotoBrowser

Elegant photo browser in Swift. 图片与视频浏览器。
MIT License
1.32k stars 207 forks source link

屏幕横屏后返回后控制器也成横屏了 #145

Open hufeisun21 opened 5 years ago

hufeisun21 commented 5 years ago

控制器是禁止横屏的。 override var supportedInterfaceOrientations: UIInterfaceOrientationMask{ return .portrait }

但是点击图片present后,图片可以横屏,点击返回控制器后。控制器也成横屏了。 请问下这个怎么解决

hufeisun21 commented 5 years ago

请问这个问题有解决办法吗?

JiongXing commented 5 years ago

这个应该只能靠你原来的页面来控制了...

JiongXing commented 5 years ago

你app的页面是支持横屏的吗

joelyou commented 5 years ago

遇到同样的问题,我在其它vc都做了控制了,但是present到你这个vc的时候 需要横竖屏,此时如果横屏,然后dismiss回穷上个vc的时候,我上个vc也横屏了; 个人验证过我present一个普通的vc是不会的,猜想这里是因为框架的present自定义动画引起的。

JiongXing commented 5 years ago

嗯,这个问题尽快解决

hufeisun21 commented 5 years ago

嗯,这个问题尽快解决

麻烦解决了,在这里说一声。我还在等待。

JiongXing commented 5 years ago

捂脸🤦‍♂️...我想想

JiongXing commented 5 years ago

我复现不了你说的问题,能做个Demo复现给我看吗? 你的项目里确保外层容器(UINavigationController, UITabBarController)是禁止了吗?

    override var shouldAutorotate: Bool {
        return false
    }
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }
wangshengjiang commented 5 years ago

请问问题解决了嘛?

wangshengjiang commented 5 years ago

使用Demo时,将AppDelegateUINavigationController改为自定义的导航控制器,并且再里面写上

override var shouldAutorotate: Bool { return false } override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .portrait }

就会造成,图片浏览界面横屏时,其他主界面也会横屏,并且旋转不过来

JiongXing commented 5 years ago

感谢反馈,我看下

JiongXing commented 4 years ago

我定位到是因为modalPresentationStyle = .custom的原因。 我猜测是苹果设计如此,自定义转场的时候,前控制器的视图依然留在视图栈层,所以要与当前控制器同时旋转,这也是合理的。 这个可能无解,我各种尝试都找不到办法禁止前控制器跟随旋转。 折中方案的话,或者可以在回去前控制器后,viewWillAppear时,强制把屏幕旋转到希望的方向。

johnil commented 4 years ago

同一个 UINavigationController 里的所有 UIViewController 都继承自一个 BaseViewController,在里面讲方向锁定为竖屏,然后将 UINavigationController 的方向返回值改为 topViewController 的方向值即可解决。

PS:由于屏幕为横屏,页面只支持竖屏,所以要在旋转时,将底部的 UIViewController 内部的 view 进行旋转。