如何根据 cellForRowAtIndexPath 中的设备获取单元格宽度。我使用自动布局和 UITableViewAutomaticDimension
Posted
技术标签:
【中文标题】如何根据 cellForRowAtIndexPath 中的设备获取单元格宽度。我使用自动布局和 UITableViewAutomaticDimension【英文标题】:How to get Cell Width according to device wise in cellForRowAtIndexPath. I use Autolayout and UITableViewAutomaticDimension 【发布时间】:2018-08-10 12:46:12 【问题描述】:我的自定义单元格和storyboard
设计在iPhone8
和Label
宽度为355,但是当我在iPhone5
中运行项目时,我希望根据iPhone5 的宽度为300,但是当我NSLog
标签宽度仍然我得到355。
我如何在iPhone5
中获得Label
Width 300?
请大家告诉我如何根据设备获得Label
的宽度
这里是我的代码链接
https://drive.google.com/open?id=1Z2bHhKS_s6P6uICqssaW0gNTDGM-p9vL
请帮帮我
【问题讨论】:
使用UIScreen.main.bounds.width
作为单元格宽度,而不是硬编码宽度。
您正在使用单元格,其实际返回的单元格大小来自 xib。
您也可以尝试在 viewDidLoad 中注册单元格,如果您将其注册为 tableView,然后在 cellForRowAtIndex 中重用,则会为您提供所需的行为。
@AbuUlHassan 我怎样才能做到这一点,请详细说明。我想你得到了我真正的问题
在下面查看我的答案并进行修改。 :)
【参考方案1】:
- (void)viewDidLoad
[super viewDidLoad];
[self.tableView registerNib:[UINib nibWithNibName:@"CustomCell_iPhone"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"CustomCell"];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"CustomCell";
CustomCell_iPhone *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
return cell;
【讨论】:
我的应用程序崩溃并给出以下错误原因:'为标识符 (CustomCell) 注册的 nib 无效 - nib 必须包含一个必须是 UITableViewCell 实例的***对象' 找到你的笔尖并检查重用标识符字段中的属性检查器设置 CustomCell。 我在哪里获得重用标识符?对不起,我不明白 @AnkurPatel 我在回答中澄清了崩溃的原因 选择 nib 后,您将在左窗格中看到视图层次结构,单击您的 tableViewCell 然后您将在右窗格中看到它。【参考方案2】:在cellForRowAt
中打印单元格/子视图框架会给出不正确的值,因为单元格尚未铺设,您的单元格显示正确,但您必须注册单元格而不是此行
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell_iPhone" owner:self options:nil] objectAtIndex:0];
我在下面看到了正确的行并且你评论了它,如果你想显示正确的帧打印它们在自定义单元类的layoutSubviews
方法中,xib 应该只包含一个根单元,所以你必须删除一个在这些单元格中,如果您想将两者都用于 tableView ,则为每个单元格创建单独的 xib
//
-(void) layoutSubviews
[super layoutSubviews];
// NSLog here
//
由于您的 tableView 占据了屏幕的整个宽度,并且您将单元格边距从两侧设置为 10,那么您可以使用它来获取 cellForRowAt 内的 lbl 宽度
CGFloat wid = [[UIScreen mainScreen] bounds].size.width - 20
【讨论】:
是的,您可以删除第二个单元格。我在 CustomCell.m 中使用 layoutSubviews 但我无法根据设备获取框架 不,它给出了正确的值,你的文件也不包含它 我在 CustomCell.M 文件中写了 layoutSubviews 吗?我在 UIViewControler 中的 UItableView 在 CustomCell.M 中 -(void)layoutSubviews [super layoutSubviews]; NSLog(@"lblTemp frame3 : %@",NSStringFromCGRect(self.lblTemp.frame)); 在 Customcell 2018-08-10 18:51:14.895155+0530 demoCell[11042:6883850] lblTemp frame3 中:10, 10, 355, 80 我想要 cellForRowAtIndexPath 中的实际宽度,因为我必须进行一些计算.从 cellForRowAtIndexPath 中返回单元格后调用 layoutSubviews 方法以上是关于如何根据 cellForRowAtIndexPath 中的设备获取单元格宽度。我使用自动布局和 UITableViewAutomaticDimension的主要内容,如果未能解决你的问题,请参考以下文章