Sim*_*ing 5 objective-c uitableview ios uistoryboard autolayout
编辑
从头开始构建一个新的示例项目,动态 tableview 单元格高度完美无缺。然后我尝试通过将我的项目缩减到最低限度来进行复制,但它仍然损坏(前几个单元格有问题)。为工作和不工作的例子附加完整的项目。项目/代码字面上看起来 99% 相同,而且我无法弄清楚 1% 的差异在哪里。唯一突然出现在我身上的是我使用了不同的尺寸类(wAny hAny vs wCompact hRegular 但我无法想象这会做任何事情,因为我只是在纵向测试
工作项目:

不工作的项目:

WORKING (new project from scratch):
https://drive.google.com/file/d/0B_EIkjmOj3ImWXZjVFZMYXZmVGc/view?usp=sharing
NOT WORKING (my project, cleaned up to it's bare minimum)
https://drive.google.com/file/d/0B_EIkjmOj3ImMGRNOXU2RlNkWEk/view?usp=sharing
Run Code Online (Sandbox Code Playgroud)
在网上搜索试图了解发生了什么,但由于某种原因,我的单元格高度不正确,直到我滚动过原型单元格。
初始加载时:

滚动经过每个单元格后:

背景颜色:
cell.postTextLabel.backgroundColor = [UIColor orangeColor];
subView.backgroundColor = [UIColor blueColor];
contentView.backgroundColor = [UIColor brownColor];
这里没有做任何太花哨的事情:只是一个原型单元格、一个子视图和三个标签(用户名、时间戳、文本)。
下面的屏幕截图突出显示了我在 Storyboard 中的约束:




我从 Parse 中提取数据,并在设置 tableView 布局时重新加载我的数据
[self.tableView setNeedsLayout];
[self.tableView layoutIfNeeded];
[self.tableView reloadData];
最后是我的cellForRowAtIndexPath方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [self postCellAtIndexPath:indexPath];
}
- (UITableViewCell *)postCellAtIndexPath:(NSIndexPath *)indexPath {
static NSString *PostCellIdentifier = @"PostCell";
PostCell *cell = (PostCell *)[self.tableView dequeueReusableCellWithIdentifier:PostCellIdentifier forIndexPath:indexPath];
[self configurePostCell:cell atIndexPath:indexPath];
[cell setNeedsLayout];
[cell layoutIfNeeded];
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
最后我发现了为什么它不起作用的问题。我下载了你上传的驱动项目,并对其进行了修改。并发现您使用紧凑的常规尺寸类别会导致错误的问题。将您的尺寸类别转换为Any、Any后,它工作得很好且完美。因此解决方案的关键是将wCompact hRegular更改为wAny hAny。代码没有变化。
这是最初的答案。
详细解答:
1)对于尺寸类别,请先阅读苹果的此文档。
2)在您损坏的演示中,尺寸类别的选择如下:
这表明您选择了特定视图,例如紧凑宽度和常规高度,意味着此自动布局仅适用于特定的 iPhone 纵向。
紧凑宽度| 常规高度组合指定仅适用于类似于纵向 iPhone 设备的尺寸的布局更改。
控件 wCompact hRegular 指示紧凑宽度和常规高度尺寸类别。
我使用了以下尺寸类别,并且在您的工作项目中我可以看到以下尺寸类别:
在这个 Size 类中它工作得很好。
不知道是苹果的bug还是什么。!!!
如果您只想支持纵向模式并且只支持 iPhone,那么您可以在“开发信息”->“设备”中选择“iPhone”。对于方向,您可以在设备方向中选择纵向和颠倒。
希望这可以帮助您解决问题。
| 归档时间: |
|
| 查看次数: |
4311 次 |
| 最近记录: |