次の質問は、この質問の一種の続きです。
主なアイデアは、AutoLayout が適切に表示する方法を知ることができるように、すべてのビューが「優先」(本質的な) サイズであることを示すことになっているということです。UILabel は、ビュー自体が表示に必要なサイズを認識できない状況の一例です。提供される幅によって異なります。
mwhussが指摘したように、setPreferredMaxLayoutWidthは、ラベルが複数の行にまたがるようにするトリックを行いました。しかし、それはここでの主な質問ではありません。問題は、引数としてsetPreferredMaxLayoutWidthに送信するこの幅の値をいつどこで取得するかです。
私は合法的に見えるものを作ることができたので、何か間違っている場合は修正してください。より良い方法を知っている場合は教えてください.
UIView では
-(CGSize) intrinsicContentSize
self.frame.widthに従って、UILabels に PreferredMaxLayoutWidth を設定しました。
UIViewController の
-(void) viewDidLayoutSubviews
メインビューのサブビューが画面上に存在する正確なフレームで指定されている場所を知っている最初のコールバックメソッドです。そのメソッド内から、サブビューを操作し、固有のサイズを無効にして、指定された幅に基づいて UILabels が複数の行に分割されるようにします。