sizeToFitが異常に機能しています

バックエンドデータベースの変更が発生するたびに実行されるコードセグメントがあります。基本的には、親ビューの内側にラベルがあります。ラベルは、新しい行(\ n)で終わる別の行のそれぞれの1つの多くのステータスメッセージの1つによって更新されます。各ステータスメッセージは、1行にしかなくてはなりません。

私が抱えている問題は、Viewが最初にリロードするときにすべてがうまく動作することです。しかし、私が画面上にいて、バックグラウンドで変化が起こると、しばらくの間、複数の行にステータスメッセージが表示されます。 sizeToFitは親ビューを含む親のラベルと同じ高さにするのは素晴らしい仕事ですが、幅の点ではそれほど悪くありません。つまり、改行だけを見るのではなく、複数行のテキストを分割します。

私に何ができる?

self.messageLabel.text = message; //lets get the status message.
        [self.messageLabel sizeToFit];
        [self.messageLabel setNeedsDisplay];
        CGRect frame = [self.messageView frame];
        frame.size.height = self.messageLabel.bounds.size.height;
        self.messageView.frame = frame;
        self.messageLabel.center = CGPointMake(CGRectGetMidX(self.messageView.bounds), CGRectGetMidY(self.messageView.bounds)-(self.messageView.cornerRadius/4));
        self.messageLabel.backgroundColor = [UIColor orangeColor];
        [self.messageView setNeedsDisplay];
3

2 答え

初期動作後にフレームのサイズが変更されるたびに発生するようです。おそらく、フレームの現在のサイズは、 -sizeToFit で新しいサイズを決定するときに使用されます。 私が使用している回避策は、sizeToFitを呼び出す前に、ビューのフレームをあらかじめ定義されたサイズに設定することです。

myLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.width.height);
[myLabel sizeToFit];
1
追加された

ラベルが必要となるサイズを決定するには、NSStringサイズメソッドを調べる必要があります。文字列にフォントが与えられるサイズや、さまざまな制約を伝えることのできるものは数多くあります。

たとえば、 [@ "string" sizeWithFont:forWidth:lineBreakMode:]; は、適切にラベルのサイズを設定するために使用できる CGSize を返します。

さて、私はUILabelが複数行の文字列をうまく扱えないことを知っています。独自のラベルを持つ複数行のテキストを処理できる独自のUIViewのサブビューを作成する方がよい場合があります。

1
追加された