自从新的iOS 11更新以来,我有一个应用程序将在模拟器和设备上显示空白的tableview行。甚至行分隔符也不会显示应该存在的任何行。如果我将模拟器更改为较旧的iOS版本,行将显示正常。没有对代码或故事板的更改。
行仍然有数据,这意味着我可以点击其中一个空行,它将执行代码并包含我期望的信息。
看起来我在其中将tableview放在视图上的其他场景并且我没有使用内置文本标签工作正常。只是这个tableview类使用内置的文本标签。
这是tableview类的代码......
@interface BunkPickTableViewController ()
@end
@implementation BunkPickTableViewController
@synthesize appDelegate, delegate, bunkPassedValue;
- (void)viewDidLoad {
[super viewDidLoad];
UIView *backgroundView = [[UIView alloc] initWithFrame:self.view.bounds];
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
CAGradientLayer *bgLayer = [BackgroundLayer tanGradient];
bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:bgLayer atIndex:0];
self.tableView.backgroundView = backgroundView;
[self.navigationController.navigationBar setTintColor:[UIColor blackColor]];
self.title = @"Bunk Codes";
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:NO animated:NO];
[self.tableView reloadData];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [appDelegate.bunkArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.backgroundColor = [UIColor clearColor];
}
Bunk *bunkObj = [appDelegate.bunkArray objectAtIndex:indexPath.row];
cell.textLabel.text = bunkObj.bunkId;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
Bunk *bunkObj = [appDelegate.bunkArray objectAtIndex:indexPath.row];
[delegate dismissBunkPop:bunkObj.bunkId];
[self.navigationController popViewControllerAnimated:YES];
}
@end
答案 0 :(得分:3)
我也有这个问题,IOS 11显示空白单元格..但在IOS 10中很好。我的问题是我使用了一个梯度,无论出于什么原因,它都会阻止显示单元格文本。删除渐变解析了空白单元格。
答案 1 :(得分:3)
这可能是因为您的tableView
位于bgLayer
。
问题似乎出现在self.view.layer insertSublayer:bgLayer atIndex:0
中。我在索引0处使用insertSubview
并且我遇到了同样的问题。这可能是iOS 11中的一个错误 - 如果你的tableView是在storyboard中定义的,那么它总会被推迟。
最佳解决方案是将bgLayer
放入tableView.backgroundView
。
注:
您也可以通过调用sendSubviewToBack
中bgLayer
上的viewDidAppear
来解决此问题,但不幸的是,tableview单元格正在移动到每个tableview reloaddata上,因此这不是一个好的解决方案。
答案 2 :(得分:0)
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.tableView.bounds;
gradient.colors = @[(id)[UIColor blackColor].CGColor, (id)[UIColor
grayColor].CGColor, (id)[UIColor
lightGrayColor].CGColor];
UIView *bgView = [[UIView alloc]
initWithFrame:self.tableView.bounds];
[self setBackgroundView:bgView];
[bgView.layer insertSublayer:gradient atIndex:0];
[self.tableView setBackgroundView:bgView];
为tableview的背景视图设置渐变图层为我解决了这个问题。在iOS 10中,我们可以直接将子图层插入tableView,但在iOS 11图层中只能插入到UITableVIew的背景视图中。
答案 3 :(得分:0)
与上述tableview子视图操作相结合,如果您的项目存在于Xcode 9之前,然后您在故事板上选中了使用安全区域布局指南,则也会出现此问题。尝试取消选中它,看看它是否有效。