0

おそらくばかげた質問を事前に申し訳ありません - 私は初心者です

メインビューに固定するためのいくつかの制約を提供して、viewDidLoad で新しい UIView を生成しています。新しいビューのサイズを理解することになると、常にゼロになります。

これは、機能していない私のコードの簡略版です。

    override func viewDidLoad() {
    super.viewDidLoad()
    
    let myView = UIView(frame: .zero)
    myView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(myView)
    myView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    myView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -200).isActive = true
    myView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    myView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    print(myView.bounds.width)
    
}

幅 (および高さ) が 0 を返しています。これは、.bounds と .frame の両方で発生します。ヒントはありますか?ありがとう!

4

1 に答える 1

0

最初の質問ですが、UIView は画面に表示されますか?

次に、ビュー コントローラーのライフ サイクルに関する知識から、ビューは viewDidLayout サブビューに配置されます。

したがって、ビューが最終的に画面に表示されたときに、またはmyView.bounds.widthをオーバーライドして呼び出す必要があります。viewDidLayout SubviewsviewDidAppear

質問をより明確にしていただきありがとうございます。

viewDidLayout サブビューの 2 番目のコレクション ビューで reloadData を使用することをお勧めします。このようにして、2 つが現在のレイアウトを取得し、最初のコレクション ビューが配置された後に 2 番目のコレクション ビューが 2 回目のレイアウトを取得します。

もう 1 つのアプローチは、相対制約を使用することです。つまり、最初のコレクション ビューの項目に対して、2 番目のコレクション ビューの項目の重量と高さの制約を作成します。このように、他のすべては実行時に自動的に行われます。最初のコレクション ビューのアイテムのサイズが後で変更され、2 番目のコレクション ビューのアイテムに影響を与える可能性がある場合でも、それは考慮されます。(動作させることができれば正確な結果が得られます)

これら 2 つのコレクション ビューのコードまたはスクリーン ショットをさらに共有していただければ幸いです。それらを作成するためのより良いアプローチを提供できます

于 2021-03-12T21:20:29.813 に答える