2

我的 CollectionView 中有一个 headerView,并根据标签的文本大小以编程方式调整了 headerView 的大小。在旋转到横向时,可重复使用的标题视图不会自动调整大小,但在滚动时它会调整自身大小以提供预期的结果。 在纵向模式下 滚动前的横向模式

滚动后处于横向模式

下面是我用来调整标题大小的片段。

override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

    switch kind{

    case UICollectionElementKindSectionHeader:

        let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "HeaderView", forIndexPath: indexPath) as! CollectionViewHeader
        var headerString = westBeaches[indexPath.section] as NSString
        var newSize: CGSize = headerString.sizeWithAttributes([NSFontAttributeName:headerView.headerText.font])
        headerView.frame.size.width = newSize.width + 20
        headerView.layer.cornerRadius = 15
        headerView.headerText.text = westBeaches[indexPath.section]
        headerView.center.x = collectionView.center.x
        headerView.alpha = 0.7
        return headerView

    default:

        assert(false, "Unexpected element Kind")

    }

}

CollectionViewHeader 是继承 UIcollectionReusableView 的自定义类,包含 headerText 作为 UILabel。当方向改变时,有什么方法可以防止可重用视图恢复到原来的大小?

4

2 回答 2

3

对我来说,我有一个 UISearchBar 作为标题,并且遇到了同样的问题。那是在旋转之后,搜索栏没有填满 CollectionView 的宽度。

我通过在旋转动画旁边设置搜索栏的宽度来修复它。

UIViewController

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)

    // Animate searchBar too
    coordinator.animateAlongsideTransition({ [unowned self] _ in
        var frame = self.searchController.searchBar.frame
        frame.size.width = size.width
        self.searchController.searchBar.frame = frame
        }, completion: nil)
}
于 2016-07-13T12:05:06.010 回答
0

您必须为方向更新 UICollectionView 流布局。

override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {

    collectionView.performBatchUpdates({ () -> Void in

    }, completion: { (complete) -> Void in

    })

}
于 2015-06-09T06:54:32.953 回答