Xcode 4.5で構築され、iOS6用のシミュレーターで実行されている簡単なテストアプリがあります
これは、UIScrollViewを備えた単一のUIViewControllerであり、UIScrollViewでは単一のUILabelです。
インターフェイスビルダーでUILabelのNumberOfLinesを0に設定し、ScrollView内で全幅にしましたが、高さは約30ポイントだけです。また、UIScrollViewを垂直スクロールのみに設定しました。2つのUIコンポーネントにいくつかのIBOutletsを設定し、ファイルの所有者をUIScrollViewのデリゲートとして設定します(そしてUIViewControllerヘッダーを配置します)。
viewDidLoadで、ラベルのテキストを素敵な長い文字列に設定しました。
- (void)viewDidLoad
{
[super viewDidLoad];
self.txtLabel2.text = @"`Twas brillig, and the slithy toves - Did gyre and gimble in the wabe: - All mimsy were the borogoves, - And the mome raths outgrabe. ";
}
次に、ViewDidAppearで、スクロールビューのコンテンツサイズをUILabelのサイズに設定します。
-(void)viewDidAppear:(BOOL)animated
{
self.scrollView.contentSize = self.txtLabel2.bounds.size;
}
これはうまく機能しているようです。UILabelは自動的に高さを調整し、スクロールビューは正しい高さに設定され、テキストを適切にスクロールします。素晴らしい。
ただし、ここでは明らかに深刻な問題を抱えています。InterfaceBuilderにアクセスして、UILabelのフォントサイズをデフォルト(17.0)から他の値に変更すると、機能しなくなります。ラベルのサイズが変更されなくなり、最初の行で切り捨てられます。
UILabelのサイズを手動で変更しようとしました-たとえば、ここで提案されているソリューションを使用します:
コンテンツを設定するときに拡張機能を使用します。
self.txtLabel2.text = @"`Twas brillig, and the slithy toves - Did gyre and gimble in the wabe: - All mimsy were the borogoves, - And the mome raths outgrabe. ";
//use the current width - resize the height
[self.txtLabel2 sizeToFitFixedWidth:self.txtLabel2.bounds.size.width];
しかし、これは何の効果もないようです。
フォントサイズを変更するとUILabelの動作が自動的に変更される理由がわかりません。また、UILabelのサイズを手動で設定しても効果がない理由もわかりません。ここで何が起きてるの?(そしてまた、そもそもこの混乱に陥らないように、私は別の方法で何をすべきか!)