1

我在代码中有一个 UICollectionReusableView 用于 UICollectionView 标题部分,如下所示:

    
    var 标题标签:UILabel!
    覆盖初始化(帧:CGRect){
       超级初始化(帧:帧)
       headerLabel = UILabel(frame: CGRectMake(12.0,12.0,frame.width,21.0))
       标题标签.numberOfLines = 1
       headerLabel.textAlignment = NSTextAlignment.Center
       headerLabel.textColor = UIColor.blackColor()
       self.backgroundColor = UIColor.whiteColor()
       self.addSubview(headingLabel)
    }

我只希望标题在显示中居中。只要我不旋转设备就可以了。如果我旋转设备,标签不再位于屏幕中央。

我的猜测是这非常简单,我似乎无法找到答案。我的假设是我可以以编程方式添加约束,但我无法完全弄清楚如何做到这一点。

或者,我认为可能有某种方法可以强制它在布局更改时重做标题,但我也无法让它工作。

任何指向正确方向的指针都将不胜感激。

节标题居中

旋转为纵向后

非常感谢。

4

2 回答 2

0

您必须在重新布局 collectionView 之前使布局无效(发生在 中viewDidLayoutSubviews),因此您必须在viewWillLayoutSubviews.

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    // Handle rotation
    collectionView.collectionViewLayout.invalidateLayout()
}
于 2018-05-24T17:17:52.440 回答
0
import Foundation
import UIKit
import MaterialComponents

class SectionHeaderAppointment:UICollectionReusableView {

var sectionHeaderlabel: UILabel!
var nameflatButton:MDCButton!

override init(frame: CGRect) {
    super.init(frame: frame)
    configure()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}


override func layoutSubviews() {
    super.layoutSubviews()
    print("Rotation")
     sectionHeaderlabel.frame = CGRect(x: 0, y: 0,  width: frame.width, height: frame.height)
     nameflatButton.frame = CGRect(x: (frame.width - (frame.width/3))/2, y: 6,  width: frame.width/3, height: frame.height - 8)
}
}
于 2019-02-28T19:02:48.113 回答