0

次のようにする必要があるテーブルビューセルがあります。

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

基本的に左側にラベルがあり、常に同じ長さになります。それは問題ありません。右側には、長さが変わるラベルがあります。たとえば、人によって明らかに異なる人の名前が含まれています。そのラベルはセル上で右揃えにする必要がありますが、これも問題ありません。

問題は、動的ラベルの左側に静的UIImageが必要なことです。これは、動的ラベルから10ピクセルの位置にありますが、一緒に移動します。

考え?

これは現在のコードであり、画像はラベルのサブビューですが、明らかに動的に移動していません。

            // Add text label
        UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 0.0, 80.0, 45.0)];
        textLabel.backgroundColor = [UIColor clearColor];
        textLabel.text = @"Account";
        textLabel.opaque = NO;
        textLabel.textColor = [UIColor colorWithRed:143/255 green:143/255 blue:143/255 alpha:.6];
        textLabel.font = [UIFont boldSystemFontOfSize:15];
        textLabel.shadowColor = [UIColor whiteColor];
        textLabel.shadowOffset = CGSizeMake(0.0, 1.0);

        //Add the image
        UIImage *image = [UIImage imageNamed:@"image.png"];
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 13.5, 18, 18)];
        [imageView image];

        // Add the Next Value label
        UILabel *valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(170, 0.0, 100, 45.0)];
        valueLabel.textAlignment = UITextAlignmentRight;
        valueLabel.textColor = [UIColor colorWithRed:143/255 green:143/255 blue:143/255 alpha:.6];
        valueLabel.backgroundColor = [UIColor clearColor];
        valueLabel.opaque = NO;
        valueLabel.font = [UIFont systemFontOfSize:15];
        valueLabel.text = [[NSUserDefaults standardUserDefaults] valueForKey:@"name"];

        [cell addSubview:textLabel];
        [cell addSubview:valueLabel];
        [valueLabel imageView];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;
4

2 に答える 2

1

このコードを試してください:

    // Add text label
    // same as before
    // ...

    NSInteger bufferFromEndOfCell = 10; // how much space you want between the end of your valueLabel and the end of the tableCell
    NSInteger widthOfValueLabel = 100; // dynamic, change this to whatever width you want
    NSInteger startingXlocationForValueLabel = tableView.frame.size.width - bufferFromEndOfCell - widthOfValueLabel;

    // Add the Next Value label
    UILabel *valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(startingXlocationForValueLabel, 0.0, widthOfValueLabel, 45.0)];
    valueLabel.textAlignment = UITextAlignmentRight;
    valueLabel.textColor = [UIColor colorWithRed:143/255 green:143/255 blue:143/255 alpha:.6];
    valueLabel.backgroundColor = [UIColor clearColor];
    valueLabel.opaque = NO;
    valueLabel.font = [UIFont systemFontOfSize:15];
    valueLabel.text = [[NSUserDefaults standardUserDefaults] valueForKey:@"name"];

    //Add the image
    NSInteger widthOfImage = 18;
    NSInteger bufferBetweenImageAndLabel = 8; // the gap between your UIImageView and your valueLabel
    CGRect rectForImageView = CGRectMake(valueLabel.frame.origin.x - widthOfImage - bufferBetweenImageAndLabel, 13.5, widthOfImage, 18);
    UIImage *image = [UIImage imageNamed:@"image.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:rectForImageView];
    imageView.image = image;

    [cell addSubview:textLabel];
    [cell addSubview:valueLabel];
    [cell addSubview:imageView];

よりクリーンな解決策があると確信していますが、私はこれをすぐに打ち負かしました。これにより、画像ビューが適切なラベルで動的に変更されます。これがあなたが探しているものと正確に一致しない場合は、私に知らせてください。私はこれを私が持っていた情報に基づいています。

于 2013-02-02T03:40:20.903 に答える
0

iOS 6をターゲットにしている場合は、「AutoLayout」をお勧めします。

そうでなければ、他の答えが提供するコードが機能する可能性があります。

素晴らしい回避策もあります。

'UIButton'を作成し、スタイルをカスタムに設定し、画像と名前を設定します。

それがあなたのために働くことを願っています。;)

于 2013-02-02T04:27:11.413 に答える