Я создаю собственный UITableViewCell.
@interface CustomTableViewCell : UITableViewCell @property (неатомарный, сильный) UILabel *title; @property (неатомарный, сильный) UIImageView *icon; @конец @implementation CustomTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ self = [супер initWithStyle:style reuseIdentifier:reuseIdentifier]; если (сам) { [самостоятельное создание подпредставлений]; self.layer.cornerRadius = 15; self.layer.borderWidth = 1,0; self.layer.masksToBounds = ДА; } вернуть себя; } - (void)setFrame:(CGRect)frame { фрейм.origin.x += 20; кадр.размер.ширина -= 2 * 20; [супер setFrame:frame]; } -(void)buildSubviews{ self.title = [self createLableWithTitle:HS_Loc(@"", @"") кадр:CGRectMake(10, 10, 20, 37)]; [self addSubview:self.title]; self.icon = [[UIImageView alloc]init]; self.icon.frame = CGRectMake(20, 18.5, 16, 16); [self addSubview:self.icon]; } -(UILabel *)createLableWithTitle:(NSString *)кадр заголовка:(CGRect)frame{ UILabel *label = [[UILabel alloc]initWithFrame:frame]; метка.текст = заголовок; label.font = [UIFont systemFontOfSize:16.0]; label.textColor = HSColorScheme.colorTextTitle; label.numberOfLines = 0; возвратная этикетка; } @конец Когда я установил UISwitch в качестве аксессуара для этой настраиваемой ячейки. Иерархия представлений, как показано ниже. Аксессуарное представление — это подвид представления содержимого.

Х вспомогательного представления равен ширине contentView. В IOS11 UISwitch трогать нельзя. В iOS12 и выше UISwitch может касаться. Почему?
Когда я установил представление аксессуаров на UITableViewCell. Иерархия представлений, как показано ниже. Представление аксессуаров не является подпредставлением contentView. В чем разница?

Я не вызывал cell addSubViews:. Я позвонил cell.accessoryView=。 Как настроить аксессуарView для пользовательского UITableViewCell в iOS11 и iOS12.