尝试UILabel
在单元格的右下角放置一个包含日期的单元格,无论它是在 iPhone 还是 iPad 上。
这是我目前拥有的,我需要做什么才能获得实际的 cell size.width
,我也尝试过这样做cell.bounds.size.width
,无论是 iPhone 还是 iPad,都具有相同的价值:
float xValue = cell.frame.size.width - 100;
UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(xValue, 20.0f, 100, 17.0f)];
[nameLabel setTag:1];
[nameLabel setFont:[UIFont boldSystemFontOfSize:15.0]];
nameLabel.textColor = [UIColor grayColor];
nameLabel.text = @"05-12-13";
// custom views should be added as subviews of the cell's contentView:
[cell.contentView addSubview:nameLabel];
ETA,这是整个自定义单元格类,也许有人可以看到导致标签重复的原因:
@interface VideoTableViewCell : UITableViewCell
+ (VideoTableViewCell *)cellForTableView:(UITableView *)tableView;
+ (CGFloat)heightForVideo:(id<VideoProtocol>)video;
- (void)updateCellForVideo:(id<VideoProtocol>)video;
@end
#define MARGIN 10
@implementation VideoTableViewCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.textLabel.font = [UIFont boldSystemFontOfSize:14];
self.detailTextLabel.font = [UIFont systemFontOfSize:13];
self.textLabel.numberOfLines = 2;
self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
return self;
}
+ (VideoTableViewCell *)cellForTableView:(UITableView *)tableView {
NSString *identifier = @"TweetCell";
VideoTableViewCell *cell = (VideoTableViewCell *)[tableView
dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[VideoTableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:identifier];
}
return cell;
}
- (void)layoutSubviews {
[super layoutSubviews];
CGRect cvf = self.contentView.frame;
self.imageView.frame = CGRectMake(0.0,
0.0,
cvf.size.height-1,
cvf.size.height-1);
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
CGRect frame = CGRectMake(cvf.size.height + MARGIN,
self.textLabel.frame.origin.y,
cvf.size.width - cvf.size.height - 2*MARGIN,
self.textLabel.frame.size.height);
self.textLabel.frame = frame;
frame = CGRectMake(cvf.size.height + MARGIN,
self.detailTextLabel.frame.origin.y,
cvf.size.width - cvf.size.height - 2*MARGIN,
self.detailTextLabel.frame.size.height);
self.detailTextLabel.frame = frame;
}
- (void)setDateLabelWithDate:(NSDate *)date {
float xValue = self.frame.size.width - 70;
// create a custom label: x y width height
UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(xValue, 40.0f, 100, 12.0f)];
dateLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin;
[dateLabel setFont:[UIFont boldSystemFontOfSize:13.0]];
dateLabel.textColor = [UIColor grayColor];
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM-dd-yy"];
NSString *dateString = [dateFormatter stringFromDate:date];
dateLabel.text = dateString;
[self.contentView addSubview:dateLabel];
}
+ (CGFloat)heightForVideo:(id<VideoProtocol>)video {
//create a dummy cell
VideoTableViewCell *sampleCell = [[VideoTableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:nil];
[sampleCell updateCellForVideo:video];
//calculate the sizes of the text labels
CGSize textSize = [video.title sizeWithFont: [VideoTableViewCell textLabelFont]
constrainedToSize:sampleCell.textLabel.frame.size
lineBreakMode:UILineBreakModeWordWrap];
CGFloat minHeight = 51 + 10; //image height + margin
return MAX(textSize.height + 20, minHeight);
}
+ (UIFont *)textLabelFont {
return [UIFont systemFontOfSize:13];
}
- (void)updateCellForVideo:(id<VideoProtocol>)video {
// set the text to the date with the tweet text
self.textLabel.text = video.title;
id<VideoAttrProtocol> speaker = [[video.speakers allObjects] objectAtIndex:0];
self.detailTextLabel.text = speaker.name;
[self setDateLabelWithDate:video.post_date];
NSURL *url = [NSURL URLWithString:video.thumbnail];
[self.imageView setImageWithURL:url
placeholderImage:[UIImage imageNamed:@"Logo.png"]];
}
@end