XCode 9 -IOS 11 UITAITHVIEW行是空的



自新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显示空白。我的问题是我正在使用梯度,无论出于何种原因,它都阻止了单元文本显示。去除梯度解决了空白细胞。

这可能是因为您的tableViewbgLayer下。

问题似乎在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前,则可能会发生此问题,然后您检查了您的故事板上使用安全的区域布局指南。尝试取消选中,看看它是否有效。

相关内容

  • 没有找到相关文章

最新更新