iOS - 旋转设备时,集合视图标题元素会重复

问题描述

我目前有一个带有标题视图的集合视图。标题视图按垂直顺序具有全宽图像、标题、副标题和全宽按钮。

在横向模式下(对于 iPad),我需要此视图的宽度为全宽的 80%。

private func setConstraints() {
    var devWidth: CGFloat = 0.0
    if UIDevice.current.orientation.isLandscape {
        devWidth = view.width * 0.8
    } else {
        devWidth = view.height * 0.8
    }
    
    leadingCVAnchor = collectionView?.leadingAnchor.constraint(equalTo: view.leadingAnchor)
    trailingCVAnchor = collectionView?.trailingAnchor.constraint(equalTo: view.trailingAnchor)
    centerCVAnchor = collectionView?.centerXAnchor.constraint(equalTo: view.centerXAnchor)
    widthCVAnchor = collectionView?.widthAnchor.constraint(equalToConstant: devWidth)
    
    collectionView?.translatesAutoresizingMaskIntoConstraints = false
    
    collectionView?.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    collectionView?.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    leadingCVAnchor?.isActive = true
    trailingCVAnchor?.isActive = true
    
    if UIDevice.current.userInterfaceIdiom == .pad {
        if UIDevice.current.orientation.isLandscape {
            centerCVAnchor?.isActive = true
            widthCVAnchor?.isActive = true
            leadingCVAnchor?.isActive = false
            trailingCVAnchor?.isActive = false
        } else {
            leadingCVAnchor?.isActive = true
            trailingCVAnchor?.isActive = true
        }
    } else {
        leadingCVAnchor?.isActive = true
        trailingCVAnchor?.isActive = true
    }
}

同样在设备旋转时,我正在更新这些约束:

override func viewWillTransition(to size: CGSize,with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.userInterfaceIdiom == .pad {
        if UIDevice.current.orientation.isLandscape {
            print("Orientation Landscape")
            leadingCVAnchor?.isActive = false
            trailingCVAnchor?.isActive = false
            widthCVAnchor?.isActive = true
            centerCVAnchor?.isActive = true
        } else {
            print("Orientation Portrait")
            leadingCVAnchor?.isActive = true
            trailingCVAnchor?.isActive = true
            widthCVAnchor?.isActive = false
            centerCVAnchor?.isActive = false
        }
    }
}

当我以纵向模式启动应用程序时,一切看起来都很好。如果我以横向模式启动应用程序也是如此。问题是当我旋转设备时。如果我是纵向并旋转到横向,我会看到标题的尺寸应该有,但在它上面,我看到标题的第二个版本,其尺寸是纵向模式。当我从横向移动到纵向时也会发生同样的情况。

我在包含集合视图的 viewController 中设置了以下内容

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    collectionView?.collectionViewLayout.invalidateLayout()
}

但它似乎对标题没有帮助。与 80% 宽度之间的转换导致此错误出现在集合视图的标题中,但我无法确定那是什么。

如何解决此问题,以便标题中的元素正确显示

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)