2016-11-22 20 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プロパティを使用する場合は、ビューがレイアウト自体の後に値を設定する必要があるため、viewDidLayoutSubviewsまたはlayoutSubviewsのメソッド(最初はビューコントローラ用、もう1つはビュー用)です。

もう1つの方法は、制約を設定することです。

0

は、そのあなたはあなたのlabelhorizontally in container, Vertically in container, fixed width and fixed heigh、この4つの制約を固定する必要があり

1

を助けるべきlabel.sizeToFit()を追加してください。この4つの制約は、常にあなたのラベルを画面中央に保ちます!

+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); 
関連する問題