0

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のサイズを手動で変更しようとしました-たとえば、ここで提案されているソリューションを使用します:

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のサイズを手動で設定しても効果がない理由もわかりません。ここで何が起きてるの?(そしてまた、そもそもこの混乱に陥らないように、私は別の方法で何をすべきか!)

4

1 に答える 1

0

複数の可能性があるため、コードが機能しない理由はわかりませんが、フォローコードはコードの優れた代替手段です

int scrollViews_fixed_width = self.scrollView.bounds.size.width;
self.txtLabel2.lineBreakMode = UILineBreakModeWordWrap; 
self.txtLabel2.numberOfLines = 0;

UIFont *font = [UIFont fontWithName:@"Helvetica" size:14.0];//Choose Your Font this is default font
CGSize constraintSize = CGSizeMake(scrollViews_fixed_width, 555);// Choose big value max possible height of textLabel or leave it 555 this will be enough
float  calculatedHeight = [@"Your Long String" sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap].height;
self.txtLabel2.frame = CGRectMake(0,0,scrollViews_fixed_width,calculatedHeight);
self.scrollView.contentSize = CGSizeMake(scrollViews_fixed_width, calculatedHeight);

上記に満足している場合、上記のコード計算はスペースベットラインを考慮していないため、高さにオフセットを追加する必要がある場合があります。いいえに応じて高さへのオフセット。行の

于 2012-10-10T18:26:42.713 に答える