swift:标签和按钮文本的居中对齐方式

时间:2017-04-04 08:22:34

标签: ios swift

以编程方式创建了一个视图,并为其添加了标签和按钮。它在垂直方向很好,它与中心对齐但是当我旋转屏幕时它不会对准中心,而是看起来像是左对齐。

这是我的代码:

<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

我如何解决这个问题,我需要它们在水平和垂直模式中居中对齐。

5 个答案:

答案 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 给我这个想法和他的回答。