こんにちは、仲間の iOS プログラマーです。アプリを作成しているときに、答えが見つからないように見える問題に遭遇しました。それをレイアウトしましょう:
唯一の子として UIScrollView を使用して UIViewController を作成しています。このビューの中に UIView があり、その中に UILabels を含む UIView のリストがあります。ご存知のように、UIScrollView の contentSize を指定する必要があります。問題は、リストがコンテンツに合わせて動的である必要があるため、ビューの高さを事前に知る方法がないことです。高さが ">=0" に設定されている制約のあるすべてのビューを追加しています。後で UIScrollView の高さを設定しようとすると、リストが内部にある UIView の高さを取得するか、origin.y とリスト内の最後のビューの高さを取得する必要があります。これはもちろん、ビューがユーザーに表示されるまでに準備ができている必要があります。
現在、view.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) を試しましたが、0 が返されました。10000 を返した view.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize); そして、view.origin.y + view.frame.height も 0 を返します。制約がまだ有効になっていないように思えます。
viewDidLoad() から制約と UIScollView.contentSize の両方を設定しようとしました。また、viewDidLoad で制約を設定し、viewWillAppear で contentSize を設定しようとしました。これは同じ結果をもたらしました。viewWillAppear で制約を設定し、viewDidLoad で contentSize を設定すると、クラッシュが発生するだけでした。
結論: view.height または同様のメソッドを取得して正しい結果を返すと同時に、ユーザーがビューを見るまでに準備ができている場合、いつ UIScrollView.contentSize を設定する必要がありますか?
ところで、私はこのアプリを Swift で作成しているので、この言語での回答が望ましいですが、Objective-C から Swift に翻訳することはできます。あなたに最も適したものに投稿してください。
ありがとうございました!:)