2016-11-22 40 views
3

我必須以編程方式居中我的UILabel,以便其文本的中心始終位於屏幕的中心。不過,我一直在犯這麼大的左側似乎水平居中,而不是:居中UILabel無法正常工作?

pic

我用下面的代碼來做到這一點:

let label = UILabel() 
label.center = self.view.center 
label.textAlignment = .center 
self.view.addSubview(label) 

所以我希望標籤具有水平相等的邊際,並且文本內部也要居中。請注意,我必須以不經意的方式編程。有人能幫我看看我做錯了什麼嗎?

+0

您使用的自動佈局 – Lion

+0

不,我唯一做的就是'theLabel.width Anchor.constraint(equalToConstant:50.0).isActive = true'來修復它的寬度 – MarksCode

+0

,那麼你應該添加更多的約束! – Lion

回答

3

只需設置centerXAnchorcenterYAnchor編程:

view.addSubview(label) 
label.translatesAutoresizingMaskIntoConstraints = false 
label.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant:0).isActive = true 
label.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant:0).isActive = true 
label.widthAnchor.constraint(equalToConstant: 50.0).isActive = true 

這會幫助你

+2

除此之外,他不必手動設置標籤的高度。文本的內在內容大小將根據需要處理調整大小。 – Nailer

+0

你說得對,高度是由內容決定的。 – kamwysoc

+0

我試圖在我的viewDidLoad這樣做,但我得到一個運行時錯誤:終止由於未捕獲的異常'NSGenericException',原因:'無法激活約束與錨因爲它們沒有共同的祖先。約束或其錨點是否引用不同視圖層次中的項目?這是非法的。'# – MarksCode

0

這是因爲視圖使用約束。 如果你想使用center屬性,你應該在視圖有自己的佈局後設置值,所以在你的viewDidLayoutSubviewslayoutSubviews方法(第一個是視圖控制器,第二個視圖)。

另一種方法是設置約束。

0

嘗試添加label.sizeToFit()它應該幫助

1

你應約束horizontally in container, Vertically in container, fixed width and fixed heigh,這四個制約你label。這四個約束將始終保持您的標籤位於屏幕中央!

+0

這是我可以通過編程的方式嗎? – MarksCode

+0

是的,你可以通過編程添加約束! – Lion

0

試試這個。它的工作對我來說

var label = UILabel(frame: CGRectMake(self.view.frame.origin.x + self.view.frame.size.width/2, self.view.frame.origin.y + self.view.frame.size.height/2, 200, 21)) 
    label.textAlignment = NSTextAlignment.Center 
    label.text = "I'am a test label" 
    label.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2) 
    self.view.addSubview(label) 
1

試試這個,不添加任何約束

label.center = CGPointMake((self.view.frame.size.width - label.frame.size.width)/2 , (self.view.frame.size.height - label.frame.size.height)/2);