UITableView中的自定义单元在iOS 13暗模式下无法正常工作

时间:2019-09-13 01:00:27

标签: objective-c uitableview cell ios13 ios-darkmode

自2011年以来,我一直在医疗应用程序中使用Objective-C代码,该代码基本上有5个选项卡以及相关的UITableViews,其中3个使用自定义单元格。最初使用暗模式时,我发现自定义单元不会自动更改为暗模式。相反,我需要实现以下代码以测试“暗模式”,并相应地更改单元格文本和背景。

问题在于,对于第一个选项卡中已填充单元格上方或下方的空白单元格,暗模式不会发生更改;它们保持空白。但是,与第二个2个选项卡关联的UITableViews中类似的空白单元格在黑暗模式下的行为确实符合预期。

下面的示例图像显示了第一个和第三个选项卡显示的单元格。我想知道此时操作系统中是否有错误,或者我是否只是没有实施适当的更改,以解释为什么暗模式仅在第一个选项卡中无法正常工作。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier "; 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier]; 
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        for (id oneObject in nib)
            if ([oneObject isKindOfClass:[CustomCell class]])
                cell = (CustomCell *)oneObject;
    } 

    NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];

    cell.calculationLabel.text = [dictionary objectForKey:@"Title"];
    [cell.calculationLabel setLineBreakMode:NSLineBreakByWordWrapping];
    cell.calculationLabel.numberOfLines = 0;

    //Make color changes in cells relevant to Dark mode, if present.
    if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) { //Dark mode
        cell.calculationLabel.textColor = [UIColor whiteColor];
        cell.calculationLabel.backgroundColor = [UIColor blackColor];
        cell.statusLabel.backgroundColor = [UIColor blackColor];
        cell.favoriteStatus.backgroundColor = [UIColor blackColor];
        cell.backgroundColor = [UIColor blackColor];
    } else { //Light mode
        cell.calculationLabel.textColor = [UIColor blackColor];
        cell.calculationLabel.backgroundColor = [UIColor whiteColor];
        cell.statusLabel.backgroundColor = [UIColor whiteColor];
        cell.favoriteStatus.backgroundColor = [UIColor whiteColor];
        cell.backgroundColor = [UIColor whiteColor];
    }

    cell.statusLabel.textColor = [UIColor systemGreenColor];

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:7)

您需要使用正确的颜色,可以自动在明暗模式之间进行调整的颜色。

避免使用whiteColorblackColor之类的颜色。使用labelColorsystemBackgroundColor。将这些颜色用于单元格和表格视图。这样就不需要任何代码来检查当前特征或界面样式。

代码,例如:

if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) { //Dark mode
    cell.calculationLabel.textColor = [UIColor whiteColor];
    cell.calculationLabel.backgroundColor = [UIColor blackColor];
    cell.statusLabel.backgroundColor = [UIColor blackColor];
    cell.favoriteStatus.backgroundColor = [UIColor blackColor];
    cell.backgroundColor = [UIColor blackColor];
} else { //Light mode
    cell.calculationLabel.textColor = [UIColor blackColor];
    cell.calculationLabel.backgroundColor = [UIColor whiteColor];
    cell.statusLabel.backgroundColor = [UIColor whiteColor];
    cell.favoriteStatus.backgroundColor = [UIColor whiteColor];
    cell.backgroundColor = [UIColor whiteColor];
}

成为:

cell.calculationLabel.textColor = UIColor.labelColor;
cell.calculationLabel.backgroundColor = UIColor.systemBackgroundColor;
cell.statusLabel.backgroundColor = UIColor.systemBackgroundColor;
cell.favoriteStatus.backgroundColor = UIColor.systemBackgroundColor;
cell.backgroundColor = UIColor.systemBackgroundColor;