1

私のアプリの詳細ビュー (Scrollview) には、約 1000 語のテキストを取得する UILabel があります。

ラベルが収まるようにサイズを変更したい - 今のところ問題なく動作する

-(void) viewDidAppear:(BOOL)animated {
NSString *message = storycontent.text;
CGSize maximumLabelSize = CGSizeMake(280,5000);
CGSize expectedLabelSize = [message sizeWithFont:storycontent.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];
CGRect newFrame = storycontent.frame;
newFrame.size.height = expectedLabelSize.height;
storycontent.frame = newFrame;
}

その詳細ビューに移動すると、ラベルのサイズが期待どおりに変更されます。奇妙なことに、UILabel を下にスクロールしようとすると、最初の単語だけが表示されるように、UILabel が元のサイズに戻ります。

その動作を回避するにはどうすればよいですか?

更新: ラベルを削除して新しいラベルを付けると、正常に動作します。奇妙な動作は、フォント サイズを 17 以外に変更した瞬間から始まります。

4

1 に答える 1

0

私の現在の解決策(または回避策)は、スナップの問題を解決する「自動レイアウトを使用」(マーク・クリザノスキーへのthx)を無効にすることでした。

Autolayout がない場合、ScrollView は自動的にサイズ変更されないため、追加しました

@property (retain, nonatomic) IBOutlet UIScrollView *scroller;

上記から既にわかっているコンテンツサイズと、常に表示される静的コンテンツを使用して、新しい FrameSize を計算しました。

NSString *message = storycontent.text;
CGSize maximumLabelSize = CGSizeMake(280,5000);
CGSize expectedLabelSize = [message sizeWithFont:storycontent.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

[scroller setContentSize:CGSizeMake(280,expectedLabelSize.height + 400)];

「自動レイアウトを使用」を有効にして同じことを行う方法があるかもしれません?!

于 2013-03-16T15:37:04.630 に答える