Ios swift:标签和按钮文本的中心对齐
通过编程,我创建了一个视图,并向其中添加了标签和按钮。它在垂直方向上很好,它与中心对齐,但当我旋转屏幕时,它并没有与中心对齐,而是看起来像是左对齐的 这是我的代码:Ios swift:标签和按钮文本的中心对齐,ios,swift,Ios,Swift,通过编程,我创建了一个视图,并向其中添加了标签和按钮。它在垂直方向上很好,它与中心对齐,但当我旋转屏幕时,它并没有与中心对齐,而是看起来像是左对齐的 这是我的代码: override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tab
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
}
当我设置self.btnTimeZone.contentHorizontalAlignment=UIControlContentHorizontalAlignment.Center
在水平模式下很好,但在垂直模式下,它们都是右对齐的;
如何解决这个问题我需要它们在水平和垂直模式下居中对齐。如果应用程序同时支持纵向和横向模式,最好的方法是使用
当然,您可以通过编程或界面生成器来创建它们,我想指出的是,您可以将标题视图创建为一个单元格,而无需通过编程进行创建;很明显,这将使设置标题子视图所需约束变得容易。旋转手机时,只需重新加载表格即可。实现以下方法并在此方法内部重新加载tableView
override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {
tableView.reloadData()
}
您可以尝试为父视图设置自动调整大小
headerView.autoresizesSubviews = true
myLabel.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.btnTimeZone.autoresizingMask = [.flexibleWidth, .flexibleHeight]
也试试这个
改变
tableView.frame.width
到
在Swift 5(以及3、4)中,您需要覆盖视图控制器生命周期的viewDidLayoutSubviews()方法,它在旋转设备时调用viewWillTransition()方法
在viewDidLayoutSubviews()方法中,您只需重新加载tableView的数据,就可以重新绘制从纵向到横向或从横向到纵向的节头,而且效果非常好
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.reloadData()
}
感谢GayashanK给了我这个想法和他的答案。当方向改变时,您可能需要重新计算帧。更改方向时,宽度将更改为高度,反之亦然。如果你上传这个示例项目,也许我可以看得更清楚一些。还有,为什么不使用autolayout?这是我用编程方式创建视图所做的全部工作。你能编辑我的代码并说明我错在哪里吗?为了确保我能给出有用的答案,我建议将其添加为单元格(从故事板),而不是用编程方式。是否需要以编程方式执行此操作?我将编辑我的答案,向您展示如何通过interface builder执行此操作。另一件要检查的事情是,在
cellForRow
方法中,您是从一个单独的.xib文件中获取单元格,还是该单元格包含在tableview中?此方法是否将自动调用。?是的。在ViewController中实现它。如果您有任何问题,请进行注释。在返回页眉视图之前,在您旋转时,不需要调用该命令吗problem@iron,尝试更改来自的值的autoresizingMask数组中的值。尽量使用边距values@iron我犯了一个错误,autoresizingMask
应该为子视图设置
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.reloadData()
}