以编程方式创建了一个视图,并为其添加了标签和按钮。它在垂直方向很好,它与中心对齐但是当我旋转屏幕时它不会对准中心,而是看起来像是左对齐。
这是我的代码:
<div>
<ul>
<li>
<a>A</a>
<a>B</a>
</li>
<li>
<a>A</a>
<a>B</a>
<a>C</a>
<a>D</a>
<a>E</a>
<a>F</a>
<a>G</a>
<a>H</a>
<a>I</a>
<a>E</a>
<a>F</a>
<a>G</a>
<a>H</a>
<a>I</a>
</li>
</ul>
</div>
In horizontal mode the button text and label are aligned to left
当我设置override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 150))
headerView.layer.borderWidth = 1
headerView.layer.borderColor = UIColor.whiteColor().CGColor
headerView.backgroundColor = ClientConfiguration.primaryUIColor()
let myLabel = UILabel()
myLabel.frame = CGRectMake(-1, -1, tableView.frame.width, 30)
myLabel.font = UIFont.boldSystemFontOfSize(14)
myLabel.backgroundColor = ClientConfiguration.primaryUIColor()
myLabel.textColor = UIColor.whiteColor()
myLabel.text = "Select Time Zone"
myLabel.textAlignment = .Center
let frame = CGRectMake(1, 1,headerView.frame.width , 70)
self.btnTimeZone.frame = frame
headerView.addSubview(myLabel)
headerView.addSubview(self.btnTimeZone)
self.buttonTitileString = self.selectedZone.value
self.btnTimeZone.setTitle(buttonTitileString, forState: .Normal)
return headerView
}
它在水平模式下很好但在垂直模式下它们都是正确对齐的; enter image description here
我如何解决这个问题,我需要它们在水平和垂直模式中居中对齐。
答案 0 :(得分:1)
如果应用程序应支持纵向和横向模式,那么好的方法是使用NSLayoutConstraint
。
当然,您既可以选择以编程方式创建它们,也可以从Interface Builder创建它们,我还要注意您可以将标题视图创建为单元格,而无需以编程方式执行;这显然会导致设置标题子视图所需的约束。
答案 1 :(得分:0)
旋转手机时只需重新加载表格。实现以下方法并在此方法内部重新加载tableView
override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {
tableView.reloadData()
}
答案 2 :(得分:0)
您可以尝试为父视图设置自动调整大小。
headerView.autoresizesSubviews = true
myLabel.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.btnTimeZone.autoresizingMask = [.flexibleWidth, .flexibleHeight]
答案 3 :(得分:0)
试试这个
变化
tableView.frame.width
到
tableView.frame.size.width
答案 4 :(得分:0)
在 Swift 5(以及 3、4)中,您必须覆盖视图控制器生命周期的 viewDidLayoutSubviews() 方法,它会在旋转设备时在 viewWillTransition() 方法之后调用。
在 viewDidLayoutSubviews() 方法中,您只需要重新加载 tableView 的数据,以便将部分标题重新绘制为纵向到横向或横向到纵向,并且效果很好。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.reloadData()
}
感谢 GayashanK 给我这个想法和他的回答。