gpt4 book ai didi

iphone - UITableViewCell frame.size.width 对于ipad 和iphone 是一样的吗?

转载 作者:行者123 更新时间:2023-11-28 22:36:03 27 4
gpt4 key购买 nike

尝试在单元格的右下角放置一个包含日期的 UILabel,无论它是在 iPhone 还是 iPad 上。

这是我目前拥有的,我需要做什么才能获得实际的单元格 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

最佳答案

您需要设置标签的autoresizingMask。根据单元格的初始大小将标签放在正确的位置,无论它是什么。正确设置 autoresizingMask 后,标签将随着单元格大小的变化而调整。

在将标签添加到内容 View 之前,添加:

// Keep the label in the bottom-right corner
nameLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;

根据所有发布的代码进行更新:

在您的自定义单元格中,每次调用 setDataLabelWithDate: 方法时您都会创建并添加一个标签。

您从 updateCellForVideo: 调用此方法,也可能从您的 View Controller (您不显示该代码)调用此方法。

您需要更新代码,这样您就不会在每次调用 setDataLabelWithDate: 时都向单元格添加新标签。只添加一次标签。

关于iphone - UITableViewCell frame.size.width 对于ipad 和iphone 是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com