Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift:标签和按钮文本的中心对齐_Ios_Swift - Fatal编程技术网

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()
}