自新iOS 11 Update以来,我有一个应用程序,它将在模拟器和设备上显示空白的TableView行。甚至行分离器也不会显示任何应该存在的行。如果我将模拟器更改为较旧的iOS版本,则行会很好。没有更改代码或故事板。
行仍然具有数据,这意味着我可以在一个空白行上点击,它将执行代码并包含我期望的信息。
看来,我有其他场景放置在桌面上的位置,我不使用内置的文本标签工作正常。仅此表视图类使用内置文本标签。
这是我的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
tableView设置图像
我也遇到了这个问题,iOS 11显示空白。我的问题是我正在使用梯度,无论出于何种原因,它都阻止了单元文本显示。去除梯度解决了空白细胞。
这可能是因为您的tableView
在bgLayer
下。
问题似乎在self.view.layer insertSublayer:bgLayer atIndex:0
中。我在索引0上使用insertSubview
,并且遇到了同样的问题。这可能是iOS 11中的一个错误 - 如果您的桌面视图是在情节提要中定义的,则总是将其推向后。
最好的解决方案是将bgLayer
放入tableView.backgroundView
。
注意:您也可以通过在viewDidAppear
中的bgLayer
上调用sendSubviewToBack
来解决它,但是不幸的是,TableView单元格在每个TableView ReloData上都向后移动,因此它不是一个好的解决方案。
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,我们可以将sublayer直接插入tableview,但在iOS 11中应仅插入uitableview的背景视图。
与上述桌面子视图操纵同时,如果您的项目存在于Xcode 9前,则可能会发生此问题,然后您检查了您的故事板上使用安全的区域布局指南。尝试取消选中,看看它是否有效。