3

だから私はiOS6を使ってアプリを作っているのですが、iOS5でうまく機能していた私のコードがもう機能しないのはなぜだろうと思っていました。保持するテキストに基づいて調整される動的UILabelのセルがあります。

これは、自動レイアウトがオンになっている場合です。

ここに画像の説明を入力してください

これは、自動レイアウトがオフになっている場合です。

ここに画像の説明を入力してください

これが私のコードです:

- (CGFloat)heightForText:(NSString *)bodyText
{

#define FONT_SIZE 13.0f
#define CELL_CONTENT_WIDTH 280.0f
#define CELL_CONTENT_MARGIN 5.0f

    CGSize constraintSize = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
    CGSize labelSize = [bodyText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
    CGFloat height = MAX(labelSize.height, 36.0f);
    //   NSLog(@"height=%f", height);
    return height + (CELL_CONTENT_MARGIN * 2);

}



- (CGFloat)tableView:(UITableView *)tv heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSInteger section = [indexPath section];

    switch (section) {


        case 0:
            if ([self.text.text length]!=0)
            {
                return [self heightForText:self.text.text];
            }
            else if ([self.link.text length]!=0)
            {

               return 60.0f;

            }
}
4

1 に答える 1

2

表示したコードは問題ありません。問題は、セル内のラベルにある制約内にある可能性があります(表示していません)。

ラベルには、スーパービューの各エッジから一定の距離にするための制約が必要です。これはすでに当てはまるかもしれません-もしそうなら、問題はラベルがその行を折り返す方法を知らないということです-あなたpreferredMaxLayoutWidthはラベルにもを設定する必要があります。

DCIntrospectなどのツールは、自動レイアウトの問題をデバッグするときに非常に役立つことがわかりました。たとえば、この状況では、これがテキストを折り返していない適切なサイズのラベルであるかどうか、またはラベルがコンテンツを適切に表示するのに十分な高さではないかどうかを判断するのは困難です。

于 2013-02-17T21:31:26.880 に答える