iOS 8上的UITableView单元格宽度停留在320pt

前端之家收集整理的这篇文章主要介绍了iOS 8上的UITableView单元格宽度停留在320pt前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正试图用自定义单元格创建一个简单的UITableView,而不使用故事板.

我在iPhone 6模拟器上遇到一个问题,其中表视图的宽度为375(应该),但是内部的单元格的宽度为320.

320号是无法在项目中找到的,因为我不是很难编码.当我设置单元格的背景颜色时,它会扩展375的全部宽度,但是我需要将图像对齐到右侧,只能对齐320,如下图所示.

我不知道是不是因为我缺少限制或有一个错误.任何帮助不胜感激,谢谢!

代码设置表:

- (TBMessageViewCell *)getMessageCellforTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath
{

    static NSString *cellIdentifier = @"MessageCell";
    TBMessageViewCell *cell = (TBMessageViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[TBMessageViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        [cell createSubviews];
    }

     // Set the new message and refresh
    [cell setMessage:self.viewmodel.messages[indexPath.row]];
    [cell populateSubviews];
    cell.backgroundColor = [UIColor blueColor];

    NSLog(@"cell Width: %f",cell.contentView.frame.size.width);

    return cell;
}

完成TBMessageViewCell:

@implementation TBMessageViewCell

const CGFloat MARGIN = 10.0f;
const CGFloat AVATAR_SIZE = 40.0f;

-(id)initWithStyle:(UITableViewCellStyle *)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if(self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]){
    }

// Sets background and selected background color
self.backgroundColor = [UIColor clearColor];
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor clearColor];
self.selectedBackgroundView = selectionColor;

return self;
}

- (void)populateSubviews
{
    // Set the message body
    [self.messageBodyLabel setText:self.message.body];
    [self.messageBodyLabel setTextAlignment:NSTextAlignmentRight];
    CGRect bodyFrame = CGRectMake(MARGIN,MARGIN,self.frame.size.width - (AVATAR_SIZE + (MARGIN * 3)),self.frame.size.height);
    // Calculates the expected frame size based on the font and dimensions of the label
    // FLT_MAX simply means no constraint in height
    CGSize maximumLabelSize = CGSizeMake(bodyFrame.size.width,FLT_MAX);
    CGRect textRect = [self.message.body boundingRectWithSize:maximumLabelSize
    options:NSStringDrawingUsesLineFragmentOrigin
    attributes:@{NSFontAttributeName:self.messageBodyLabel.font}
    context:nil];
    bodyFrame.size.height = textRect.size.height;

    // Setup the new avatar frame (Right aligned)
    CGRect avatarFrame = CGRectMake(bodyFrame.size.width + (MARGIN * 2),AVATAR_SIZE,AVATAR_SIZE);

    // Align to the LEFT side for current user's messages
    if ([[TBConfig userID] isEqualToString:self.message.user.userID]) {
        // Set avatar to left if it's me
        avatarFrame.origin.x = MARGIN;
        bodyFrame.origin.x = AVATAR_SIZE + (MARGIN * 2);
        [self.messageBodyLabel setTextAlignment:NSTextAlignmentLeft];
    }

    self.avatar.frame = avatarFrame;
    self.avatar.layer.cornerRadius = self.avatar.frame.size.width/2;
    self.messageBodyLabel.frame = bodyFrame;

    // Set the new cell height on the main Cell
    CGFloat cellHeight = MAX(bodyFrame.size.height,self.frame.size.height) + MARGIN;
    self.frame = CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,cellHeight);

    // Set the new Profile avatar
    if (![self.avatar.profileID isEqualToString:self.message.user.facebookID]) {
        [self.avatar setProfileID:nil];
        [self.avatar setProfileID:self.message.user.facebookID];
    }
}

- (void)createSubviews
{
    self.messageBodyLabel = [[UILabel alloc] init];
    self.messageBodyLabel.textColor = [UIColor whiteColor];
    self.messageBodyLabel.lineBreakMode = NSLineBreakByWordWrapping;
    self.messageBodyLabel.numberOfLines = 0;
    [self addSubview:self.messageBodyLabel];

    // Creates the avatar
    self.avatar = [[FBProfilePictureView alloc] init];
    [self.avatar setPictureCropping:FBProfilePictureCroppingSquare];
    [self addSubview:self.avatar];
}

解决方法

在将单元格的尺寸添加显示屏之前,您将打印单元格的大小(在尺寸调整之前).你想像谁会把这个单元格大小?你觉得ot应该从哪里获取表视图宽度?它甚至不知道哪个表视图将要交给.

添加显示器时,单元格将被给予适当的框架.

编辑:哦,你可能不希望该cellIdentifier是静态的.你可能想要* const.

猜你在找的iOS相关文章