さまざまな静的テキスト要素を表示する iOS ビューを作成しています。xib は次のようになります。
タイトル、タイムスタンプ、本文、フッターの 4 つのラベルを使用します。すべてのビューは、その上の兄弟ビューに垂直に固定され、親ビューの左/右に固定されます。すべてのラベルは、高さが >= で、行数が 0 に設定され、行の折り返しスタイルが「ワード ラップ」である本文を除いて、高さが固定されています。親ビューは UIScrollView です。
iPhone では問題ないように見えます。
ただし、iPad では次のように表示されます。
は?body ラベルの余分な縦方向のスペースはどこから来ているのでしょうか? xib とそのビュー コントローラーは、iPhone と iPad で同じです (現時点ではカスタム iPad コードはありません)。垂直方向のスペースは、ラベルがレンダリングする改行の数に直接関係していることがわかりました。行が折り返されない場合、余分な垂直方向のスペースはありません。折り返す行が数行だけの場合は、垂直方向に少し余分なスペースがあります。ほぼすべての行が折り返されている場合は、そのように見えます。
まず、UILabel がこのように動作する理由についてのアイデアはありますか?
第二に、これをやめることができない場合、どうすれば回避できますか?
私はすでにいくつかのことを試しました。-viewDidLayoutSubViews 内で [bodyLabel sizeToFit] を呼び出すと、ラベルは修正されますが、兄弟ビューのレイアウトは修正されません (たとえば、フッター ラベルが画面のすぐ下にプルアップされるのではなく、画面の下部に固定されます)。体)。sizeToFit を呼び出した後、ビュー全体をその子を再レイアウトしようとする試みは無視されます。また、フォントに基づいて高さを計算して UILabel のサイズを変更しようとしましたが、これは -sizeToFit と同じ動作になります (コードは増えますが)。
Body UILabel を UITextView に置き換えても、奇妙な垂直方向の間隔の問題は発生しませんが、UITextView の高さを手動で (フォント計算を使用して) 計算する必要があります。スクロールを拒否します (コンテンツが境界に対して大きすぎることを知らないかのように)。
だから現時点で私は立ち往生しています。UILabel が iPad レイアウトでこのように動作する理由の説明だけでも役立ちます。