自定义 UITableViewCell 在 iPad 上的宽度错误

Posted

技术标签:

【中文标题】自定义 UITableViewCell 在 iPad 上的宽度错误【英文标题】:Custom UITableViewCell is wrong width on iPad 【发布时间】:2015-06-05 20:46:56 【问题描述】:

我创建了一个自定义UITableViewCell,但是当我在 iPad 上运行我的应用程序时,单元格的内容与 iPhone 上的宽度相同。我希望内容——例如背景UIView——成为完整的宽度。

customCell.h

#import <UIKit/UIKit.h>

@interface customCell : UITableViewCell

@property (nonatomic, strong) UILabel *title;
@property (nonatomic, strong) UILabel *description;
@property (nonatomic, strong) UIView *background;

@end

customCell.m

#import "customCell.h"

@implementation customCell

@synthesize title = _title;
@synthesize description = _description;
@synthesize background = _background;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        // configure background
        self.background = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.contentView.frame.size.width, 115.0f)];

        // configure title
        self.title = [[UILabel alloc] initWithFrame:CGRectMake(5, 10, self.contentView.frame.size.width-10, 70)];
        self.title.textAlignment = NSTextAlignmentNatural;
        self.title.lineBreakMode = NSLineBreakByWordWrapping;
        self.title.numberOfLines = 4;
        self.title.preferredMaxLayoutWidth = 20;
        self.title.adjustsFontSizeToFitWidth = NO;
        self.title.textColor = [UIColor whiteColor];
        self.title.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:16];

        [self.background addSubview:self.title];

        // configure description
        self.description = [[UILabel alloc] initWithFrame:CGRectMake(5, 80, self.contentView.frame.size.width-10, 20)];
        self.description.textColor = [UIColor whiteColor];
        self.description.textAlignment = NSTextAlignmentLeft;
        self.description.font = [UIFont fontWithName:@"SourceSansPro-Bold" size:13];

        [self.background addSubview:self.description];

        [self addSubview:self.background];
        [self sendSubviewToBack:self.background];
    

    return self;


@end

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

单元格的大小尚未在initWithStyle:reuseIdentifier: 方法中设置。使用正确的 autoresizingMask 值设置您的子视图,或者实现单元格的 layoutSubviews 方法来更新它们的大小。

此外,由于您将titledescription 标签添加到background 视图,标签的大小应基于background 视图的大小,而不是单元格的大小contentView .

最后,永远不要将属性命名为description。会与继承自NSObjectdescription方法冲突。

【讨论】:

以上是关于自定义 UITableViewCell 在 iPad 上的宽度错误的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UITableViewCell 按钮单击

在 UITableView 中定义高度的自定义 UITableViewCell

自定义 UITableViewCell 的 iOS 单元测试

在运行时重新加载自定义 UITableViewCell 的 Nib

如何在自定义 UITableViewCell 中增加 Label 的高度

在运行时无法更改和自定义自定义 UITableViewCell 中的 UIButtons 的标题