• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - pop segue 后方向未更新

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:07:11 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的设置

我有一个 UICollectionViewController,它显示 纵向 2 列横向 3 列,就像这样:

Portrait Orientation . . . . Landscape Orientation

我正在使用此代码在旋转时触发布局刷新:

- (void)updateViewConstraints
{
    [super updateViewConstraints];
    [[self.collectionView collectionViewLayout] invalidateLayout];
}

一切正常,但是...

问题

1.我正在纵向查看collectionView:

Portrait Orientation

一切都好。

2.我单击其中一个单元格以转到详细 View ,该 View 也支持两种方向。然后在详细 View 中,我将方向切换为横向。还是不错的。

3. 还是在 Landscape 中,我现在点击 回到 collectionView,然后我看到的是这样的:

The error哎呀!

我完全不知道这是什么原因。在 SO 和 Google 上搜索没有出现任何结果。

我的尝试

我尝试在 collectionVC.m 文件中实现此方法:

- (void)viewWillTransitionToSizeCGSize)size withTransitionCoordinatorid<UIViewControllerTransitionCoordinator>)coordinator
{
   [super blahblah];
   [[self.collectionView collectionViewLayout] invalidateLayout];
}

虽然即使我在 detailView 上也会调用它,但它并不能解决问题。

注意事项:

  1. 除了我在上面发布的两个之外,我没有实现任何与方向相关的应该/将/已完成的方法。
  2. 我注意到的一件事是,collectionView 正在切换到 2 列布局。看起来它的 View 边界变得困惑了。

Potato对不起,很长的帖子。这是一个土 bean 。

那么你有什么想法吗?

更新:我抓到了 screenshot of the UI hierarchy ,可能会有所帮助。



Best Answer-推荐答案


您面临的问题是,当集合 viewController 不可见时,旋转确实发生了。所以 updateViewConstraintsviewWillTransitionToSize:withTransitionCoordinator: 都不会被调用。

这个问题有两种可能的解决方案。

你可以观察到方向的变化

 // in viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selectorselector(orientationDidChange name:UIDeviceOrientationDidChangeNotification object:nil];

 - (void)orientationDidChangeNSNotification *)notification
  {
       //TODO: resetup the layout itemSize, etc if your it depend on the collection bounds.
       // and make sure to do that after the rotation did happend(i.e  in viewWillAppear or orientationDidChange
      [[self.collectionView collectionViewLayout] invalidateLayout];
  }

您可以在 viewWillAppear 中使布局无效

     -(void)viewWillAppearBOOL)animated  
     {  
       [super viewWillAppear:animated];  
        //TODO: resetup the layout itemSize, etc if your it depend on the collection bounds.
       // and make sure to do that after the rotation did happend(i.e  in viewWillAppear or orientationDidChange
       [[self.collectionView collectionViewLayout] invalidateLayout];
     }

关于ios - pop segue 后方向未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34739534/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap