Невозможно выполнить основные ограничения, выполняемые программно в iOS 9

#ios #objective-c #autolayout #ios-autolayout

#iOS #цель-c #автоматическое описание #ios-автозаполнение

Вопрос:

Я работал над тем, чтобы попытаться удовлетворить некоторые основные ограничения, но мне не повезло. Я уже работал с ограничениями раньше, и, похоже, это должно сработать. Я не уверен, что это проблема Apple, потому что я сталкивался с другими вопросами с ограничениями, в которых это было, однако решения, которым я следовал, не решили проблему.

Вот код, который я использую:

UITableViewController viewDidLoad Загрузка:

 self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 100;
 

Инициализация TestTableViewCell:

 -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {

    self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    self.mainTextLabel = [[UILabel alloc] init];
    self.mainTextLabel.frame = CGRectMake(0, 0, 0, 0);
    [self.mainTextLabel setTextColor:[UIColor blackColor]];
    [self.mainTextLabel setBackgroundColor:[UIColor colorWithHue:32 saturation:100 brightness:63 alpha:1]];
    [self.mainTextLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:18.0f]];
    self.mainTextLabel.numberOfLines = 0;
    [self.contentView addSubview:self.mainTextLabel];

    [self setupConstraints];
}
return self;
 

Настройка ограничений TestTableViewCell:

 - (void)setupConstraints {

NSDictionary *viewsDictionary = @{@"textLabel":self.mainTextLabel};

NSArray *mainHorizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[textLabel]-20-|"
                                                                             options:0
                                                                             metrics:nil
                                                                               views:viewsDictionary];
[self.contentView addConstraints:mainHorizontalConstraints];


NSArray *mainVerticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[textLabel]-20-|"
                                                                           options:0
                                                                           metrics:nil
                                                                             views:viewsDictionary];
[self.contentView addConstraints:mainVerticalConstraints];
 

Получено сообщение об ошибке:

 Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
 

Я просто устанавливаю базовые верхние, нижние, начальные и конечные ограничения, и эти ограничения нарушаются. Я что-то упускаю из виду?

Комментарии:

1. Почему вы программно ограничиваете свой элемент tableview. показать пользовательский интерфейс вашего Tableview

2. Попробуйте установить для свойства «setTranslatesAutoresizingMaskIntoConstraints» значение false для tableViewCell.

3. @Rikh установил для «setTranslatesAutoresizingMaskIntoConstraints» значение false, и ограничения все еще нарушаются

4. @HimanshuMoradiya Я выполняю ограничения программно, потому что я работаю с устаревшим кодом

5. @MichaelLeech пожалуйста, обновите свой вопрос одним снимком экрана, чтобы легко понять, какие ограничения вы выполняете программно.

Ответ №1:

Установка translatesAutoresizingMaskIntoConstraints в NO на mainTextLabel устраняет проблему.