2017-04-04 132 views
1

以編程方式,我創建了一個視圖並向其添加了標籤和按鈕。它在垂直方向上很好,它與中心對齊,但是當我旋轉屏幕時,它不對齊居中,而是看起來像左對齊。swift:標籤和按鈕文本的中心對齊方式

這是我的代碼:

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 

} 

In horizontal mode the button text and label are aligned to left

,當我設置self.btnTimeZone.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Center

它在水平模式很好,但在垂直模式中都作爲是右對齊; enter image description here

我該如何解決這個問題,我需要他們兩個中心水平和垂直模式對齊。

+0

你可能要重新計算框架的方向改變時。當您更改方向時,寬度會更改爲高度,反之亦然。如果您上傳示例項目,也許我可以更好地審視它。另外,爲什麼你不使用自動佈局? –

+0

這是我所做的所有創建視圖Programitically。 – iron

回答

1

如果應用程序應支持縱向和橫向模式,最好的方法是使用NSLayoutConstraint

當然,你可以選擇以編程方式或從界面生成器創建它們,我想指出,你可以創建標題視圖作爲單元格,而不需要以編程方式進行;這顯然會導致爲頭部子視圖設置所需的限制。

+0

你能編輯以上我的代碼,並顯示我在哪裏錯了..? – iron

+0

爲了確保我會給出一個有用的答案,我建議將它作爲一個單元格(從storyboard)添加,而不是以編程方式進行。是否需要以編程方式進行? –

+0

yes of course我需要它 – iron

0

您只需在旋轉手機時重新加載表格。實施以下方法並在此方法的內部重新加載表格

override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) { 

     tableView.reloadData() 

    } 
+0

是這個方法會自動調用。? – iron

+0

這不起作用 – iron

+0

是的。在ViewController中實現它。如果您有任何問題,請發表評論 – GayashanK

0

您可以嘗試爲父視圖設置自動調整大小。

headerView.autoresizesSubviews = true 
myLabel.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
self.btnTimeZone.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
+0

這應該在返回標題視圖之前使用 – iron

+0

仍然是同樣的問題 – iron

+0

@iron,嘗試在[這裏更改autoresizingMask數組中的值](https://developer.apple.com/reference/uikit/uiviewautoresizing)。嘗試使用保證金值 – svvoff

0

嘗試,這也

變化

tableView.frame.width 

tableView.frame.size.width