2016-09-22 6 views
0

OK、私は私のiPhone 5S上でそれをテストするとき、私は.swiftストーリーボードにボタンを追加した、私はその後、私のViewController.swiftにSwift3センターUIbutton

@IBOutlet weak var HelloButton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    HelloButton.frame.origin.x = view.frame.size.width/2 



} 

を次のコードを追加しているが、それを動かします私の画面の右側にあり、それを中心にしていません。私はボタンを中央に置くために何をする必要があるのか​​不明です。

はい、これは私の最初のhelloWorldアプリですが、私の頭の上にあるかもしれませんが、ウェブプログラミングを理解していて、それを中心に自動で画面の幅の合計とボタンの幅が必要です。私はその後、私たちはこの

#button{margin:0 auto;} 

を行うが、これはHTMLやCSSではありませんCSSで例えば2

によって画面表示幅を分割するボタンに言う必要があります。 origin.xがボタンビューの最初の点(左上)、いないビューの中心である、あなたはそれが背景色です変更することができますので、ユアーズが正しくない

HelloButton.center.x = view.frame.width/2 

:IT SWIFT3

+0

を。水平に中心を置き、垂直に中心を置く。自動レイアウトを使用している場合、フレームを変更することはできません。 – Paulw11

+0

viewWillAppearに移動するか、おそらくさらに優れたviewWillLayoutSubviewsに移動してみてください。フレームは、常にviewDidLoadの間にセットアップされ、正しいとは限りません。 – Mike

答えて

2

はこれを試してみてください'Sまた

にそれを見るために、異なる色、変数名は、自動レイアウトが有効になっているプロジェクトで、コードの規約

+0

これは私のために働いて、私が探していた外観を達成しました。このコードを@Wilson Balderramaの下のコードと組み合わせた この方法では、画面がどのように回転するかは問題ありません。私はこのコードをviewDidLoadエリアにまっすぐに置こうとしましたが、画面が回転したときには動作しませんでした。 これはチックを得る理由は、私が尋ねた直接の質問に答えたからです。しかし、より詳細な回答のためには、Tj3n&Wilsonの回答を組み合わせる必要があります。 – RussellHarrower

+0

もしあなたがautolayoutを使っているならば、あなたは回転後にあなたのビューを新しいレイアウトで更新します:D実際にはプログラムよりも優れているので、UI配置を再度呼び出す必要があります。あなたが間違った場所を探しているのでなければ、それはあなたのために自動的に更新されるかもしれません。 – Tj3n

0

続い小文字、すべきですか?自動レイアウトを有効にしてからviewdidLoadのUIを変更すると、適切な結果が得られないことがあります。使用する-viewWillLayoutSubviewsメソッドは、UIのタスクを行うには、それはあなたのボタンを中央にしたい

myButton.center = self.view.center 

希望します。

0

コードをviewDidAppearに追加すると、実際のビューが表示されます。また、あなたはそれを

2

を中心にしたい場合は、あなたが望むものを達成するため自動レイアウトを使用する必要がありますbutton.center.xの代わりbutton.frame.origin.xを使用する必要がありますし、あなたのやり方は、メインの内側にあなたのViewControllerに次のようなものです。選択ポップアップで

- (>上向き青い線をドラッグして、制御マウスの左クリックを解放し、あなたがポップアップが表示されますコントロール+左マウスをクリックしてください):ストーリーボードオプション:

  • センターを水平にコンテナ
  • コンテナ 012で
  • センター垂直

しかし、あなたはプログラムでそれをしたい場合は、viewWillLayoutSubviewsに方法それを行う:あなたはストーリーボードを使用している場合、あなたはインターフェイスビルダーに制約を追加する必要があり

class ViewController: UIViewController { 

    @IBOutlet weak var button: UIButton! 

    override func viewWillLayoutSubviews() { 
    super. viewWillLayoutSubviews() 

    button.center = view.center 
    } 

} 
+0

私は間違った場所で探していない限り、 – RussellHarrower

+0

あなたはsuperのメソッドを常に呼び出すべきです。そうでなければ、クラスの親によって提供される機能は実行されません。 – Wilson