1

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

写真にあるように、2つのラベルがあります。1つは4つの正方形のアイコンで、もう1つはプロフィール写真です。最初のラベルは動的にサイズ変更されていません。そして2番目は正しく整列されていません。

これを解決するにはどうすればよいですか?そのための一般的なパターンは何ですか?

更新された画像

今、私は真ん中のビューに別の問題があります。タイトルが大きくなっても下がらない。解決策はありますか?

更新:あなたが言ったように、私はlayoutSubviewsでそれを解決しました。どうもありがとうございます!

4

2 に答える 2

3

ある種の方法を使用して、テーブルビューセルの高さを動的に計算する必要があります。

個人的には、同様のテーブルビュー形式でTwitterを使用しています。カスタムセル用に、セル.h.mを作成するだけです。

githubで元の例を見つけることができます

特に以下の(void)layoutSubviewsコードを見てください

このチュートリアルも見てください

yourcustomcell.h

#import <UIKit/UIKit.h>
@interface TwitterFeedCell : UITableViewCell {}
@end

カスタムcell.m

   #import "TwitterFeedCell.h"
    #import <QuartzCore/QuartzCore.h>

    @implementation TwitterFeedCell

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            [[self detailTextLabel] setLineBreakMode:UILineBreakModeWordWrap];
            [[self detailTextLabel] setNumberOfLines:NSIntegerMax];

            [[[self imageView] layer] setMasksToBounds:YES];
            [[[self imageView] layer] setCornerRadius:5.0];

            //[self setSelectionStyle:UITableViewCellSelectionStyleNone];
        }
        return self;
    }
    - (void)layoutSubviews {
        [super layoutSubviews];

        CGRect rect = [[self imageView] frame];
        rect.origin.x = 5.0;
        rect.origin.y = 5.0;
        [[self imageView] setFrame:rect];

        rect = [[self textLabel] frame];
        rect.origin.x = 60.0;
        rect.origin.y = 5.0;
        [[self textLabel] setFrame:rect];

        rect = [[self detailTextLabel] frame];
        rect.origin.x = 60.0;
        rect.origin.y = 27.0;
        [[self detailTextLabel] setFrame:rect];
    }
    @end

セル識別子でカスタムセルクラスを呼び出す

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"tweets";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[TwitterFeedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        //cell = [[TwitterFeedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    //cell.textLabel.text
    //cell.detailTextLabel.text
    //cell.imageView.image
}
于 2013-01-15T14:25:39.320 に答える
1

この方法を使用して、文字列の高さと幅を計算します

+  (CGSize) calculateLabelHeightWith:(CGFloat)width text:(NSString*)textString
{
    CGSize maximumSize = CGSizeMake(width, 9999);
    CGSize size = [textString sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:14]
                         constrainedToSize:maximumSize 
                             lineBreakMode:UILineBreakModeWordWrap];
    return size;
}

+ (CGSize) calculateLabelWidthOfString:(NSString*)textString withFont:(UIFont*)font
{
    CGSize maximumSize = CGSizeMake(9999, 22);
    CGSize size = [textString sizeWithFont:font
                         constrainedToSize:maximumSize 
                             lineBreakMode:UILineBreakModeWordWrap];
    return size;
}

ただし、テーブルビューセルの高さを動的に設定する必要があります

そのために

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return <height>;
}
于 2013-01-15T14:21:32.253 に答える