2017-02-26 7 views
0

コントローラの上部、ナビゲーションバーの下にビュー(addressLabelBackground)があります。ポートレートモードでは問題なく表示されますが、デバイスを横向きにするとサイズを変更しようとしています。制約を追加した後、ビューとそのサブビューが消える

私はaddressLabelBackgroundをビューの左側(0)、ビュー(0)の右側とナビゲーションバー(0)に固定してストーリーボードにいくつかの制約を追加しようとしましたが、アプリケーションを実行するときビューとそのすべてのサブビューが消えます。

私はまた、(私はサブビューのためにやったように)プログラムで制約を追加しようとしましたが、addressLabelBackgroundとその中のサブビューは消えます。

はここ(viewDidLoad中)コードです: 答えた後に更新、クラッシュ

view.addSubview(addressLabelBackground) 
    addressLabelBackground.addSubview(addressLabel) 
    addressLabelBackground.addSubview(turnToTechLogo) 

    addressLabelBackground.translatesAutoresizingMaskIntoConstraints = false 

    addressLabelBackground.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
    addressLabelBackground.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 
    addressLabelBackground.topAnchor.constraint(equalTo: (navigationController?.navigationBar.bottomAnchor)!).isActive = true 

    addressLabel.font = UIFont.boldSystemFont(ofSize: 16.0) 
    addressLabel.translatesAutoresizingMaskIntoConstraints = false 

    addressLabel.centerXAnchor.constraint(equalTo: addressLabelBackground.centerXAnchor).isActive = true 
    addressLabel.topAnchor.constraint(equalTo: addressLabelBackground.topAnchor).isActive = true 
    addressLabel.bottomAnchor.constraint(equalTo: addressLabelBackground.bottomAnchor).isActive = true 

縦向きと横向きの両方で完全に罰金addressLabel作業のための制約だ - それは、ビューの中央に留まります。しかし、同じ方法で、またはストーリーボードでaddressLabelBackgroundの制約を追加しようとすると、すべてが消えます。

このビューをナビゲーションバーの下に固定し、デバイスが横長モードのときに画面の幅に合わせて幅を広げるにはどうすればよいですか?

EDIT(翌日):まだこれを把握しようとしています。私はinnerContainerと呼ばれるサブビューを作成し、そのtopAnchorにそれをピン留め試してみた:

let frame = CGRect(x: 0, y: 20, width: self.view.bounds.width, height: self.view.bounds.height-20) 
    let innerContainer = UIView(frame: frame) 

    self.view.addSubview(innerContainer) 
    innerContainer.addSubview(addressLabelBackground) 

    addressLabelBackground.translatesAutoresizingMaskIntoConstraints = false 
    addressLabelBackground.topAnchor.constraint(equalTo: innerContainer.topAnchor).isActive = true 

しかし、再び、それが消えます。

私はまた、ストーリーボードのtopLayoutGuideの上端(0点)にピンインしてみましたが、それも消えてしまいました。

+0

これは完全な制約条件ですか?そうでない場合は、残りの部分を投稿してください。 – dfd

+0

彼らは必要ではなかったので、私はプログラム上の制約を取りました。今私は 'view.addSubview(addressLabelBackground)'を持っています。そして、私は 'addressLabel'と' logo 'を 'addressLabelBackground'の中に入れました。今のところ、それらのサブビューは方向に関係なく 'addressLabelBackground'の中に置かれます。しかし、私はまだ 'addressLabelBackground'をランドスケープモードで全幅にリサイズすることができません – KingTim

+0

次に、addressLabelBackgroundにいくつかの制約がありません。あなたはそれにcenterXとtopを与えましたが、それは本質的な幅は何ですか?テキスト属性値を追加しましたか? – dfd

答えて

0

addressLabelBackgroundには、上部に固定されるだけでなく、スーパービューの側面に固定される自動レイアウトが必要です。既存のwidthAnchorの制約を次の2つに置き換えます。

addressLabelBackground.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
addressLabelBackground.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 
+0

アンカーで制約をアクティブ化できませんでした。およびこれらは共通の祖先を持たないためです。制約またはそのアンカーは、アイテムをさまざまなビュー階層で参照していますか?それは違法です。」 – KingTim

+0

これはあなたの一番の制約です。ナビゲーションバーは、addressLabelBackgroundと同じ階層にありません。 topMarginGuideの使い方を示す2つの質問があります:http://stackoverflow.com/questions/26837957/is-it-possible-to-pin-a-uiviews-top-to-the-bottom-of-the -navigation-bar、http://stackoverflow.com/questions/32568056/pin-uiview-just-below-uinavigationbar-using-autolayout – dfd

+0

私の編集を参照してください、私はいくつかの他のアプローチを試みましたが、これはまだと思われませんプログラムでもストーリーボードでも可能です。間違いなく、私はナビゲーションバーの一番下に何かを固定するのがなぜ難しいのか分かりません。 – KingTim

関連する問題