Подтвердить что ты не робот

Интерфейс Builder сохраняет сброс ширины моего пользовательского UITableViewCell

Я использую Interface Builder для создания пользовательского UITableViewCell для iPad-приложения.

У меня есть выделенный XIB файл, который имеет UITableViewCell в качестве корневого представления. Я могу изменить ширину UITableViewCell на 1024 (в инспекторе размера на правой панели свойств XCode), и это временно изменяет размер ячейки на холсте.

Однако, если впоследствии я попытаюсь переместить/изменить размер некоторых элементов в UITableViewCell или закрыть и снова открыть XIB, XCode решает до reset ширину UITableViewCell до 320 (конкретная ширина iPhone).

Затем ячейка на холсте скрывает элементы внутри ячейки и делает невозможным создание ячейки, если я не изменю размер ячейки снова. Как только вы обойдете этот цикл несколько раз, это становится довольно раздражающим.

Кто-нибудь знает, как я могу установить ширину так, чтобы она была постоянной или какой-то, как указать, что UITableViewCell является специфичным для iPad?


Чтобы воссоздать...

  • Файл > Создать > Файл...
  • UserInterface > Пусто
  • Семейство устройств == iPad

  • Перетащите новый UITableViewCell на холст (его созданный с шириной 320, несмотря на выбор iPad ранее)

  • Измените размер UITableViewCell на 1024 (пока все хорошо)
  • Перетащите UILabel на левую часть UITableViewCell (все еще хорошо)
  • Измените размер UILabel любым способом, перетащив угол (НЕ ИСПОЛЬЗУЙТЕ ИНСПЕКТОР АТРИБУТОВ) - И... Размер UITableViewCell reset назад до 320

ИЗМЕНИТЬ:

Я только что получил следующий ответ от Apple на билет Radar, который я создал давно...

Привет, Оливер,

Это продолжение в отношении идентификатора ошибки № 13222753.

Инженерия запросила следующую информацию, чтобы дополнительно расследуйте эту проблему:

Мы считаем, что этот вопрос был рассмотрен в последнем семестре Xcode 5.1.

Это предварительная версия набора инструментов для разработчиков Xcode для Mac, iPhone и iPad. Он включает в себя Xcode IDE, iOS Simulator и все необходимые инструменты и рамки для создания приложений OS X и iOS. пожалуйста проверьте этот выпуск и обновите отчет об ошибке с результатами.

Xcode 5.1 Seed - Build 5B71f Добавлено: 13 декабря 2013 г.

Я также просто попытался воссоздать проблему в Xcode 5.0.2, и похоже, что она исправлена ​​и с этой сборкой.

4b9b3361

Ответ 1

Я не знаю, считаете ли вы это действительным ответом, но проблема только для меня возникла, когда я использовал autolayout в IB. Если я отключу это, проблема изменения размера Xcode в UITableViewCell исчезнет.

Чтобы отключить автозапуск, просто выберите UITableViewCell, а затем справа в "Инспекторе файлов" установите флажок для autolayout, чтобы отключить его.

Ответ 2

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

Создайте пользовательский класс UITableViewCell, который загружает nib и устанавливает представление nib верхнего уровня в качестве подсмотра представления содержимого ячейки:

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

    if (self) {
        UINib *nib = [UINib nibWithNibName:@"YourNibName" bundle:nil];
        UIView* containerView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
        containerView.translatesAutoresizingMaskIntoConstraints = NO
        [self.contentView addSubview:containerView];

        NSDictionary *views = NSDictionaryOfVariableBindings(containerView);
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[containerView]|" options:0 metrics:nil views:views]];
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[containerView]|" options:0 metrics:nil views:views]];
    }

    return self;
}

Зарегистрируйте свой класс в виде таблицы:

[tableView registerClass:YourCellClass forCellReuseIdentifier:@"YourCellID"]`

Ответ 3

Я просто сделал тест и не имел проблем с изменением размера ячейки. Это не имело значения, если Xib был создан с опцией "для iPhone" или "для iPad". Таким образом, это работает как ожидалось.

Хитрость заключается не в том, чтобы перетащить размер, а в том, чтобы использовать Инспектор для изменения ширины - это оставляет ячейку размером 1024.

Ответ 4

Я подтверждаю, что ответ Эдварда Хуйна правильный. В то же время я не мог бы отключить автоспуск, изменить высоту, снова включить автоспуск. Это потребовало бы, чтобы я выполнил повторную настройку всех параметров автозапуска для каждого поднабора содержимого.

Я просто экспериментировал и обнаружил, что открытие xib файла в TextEdit и изменение ширины и высоты tableViewCell, и tableViewCellContentView фактически сохранит все автоопределения и обновит размер ячейки. Мало из постоянных значений ограничений теперь будет устаревшим, что можно легко устранить с помощью "ограничений обновления" на таких ограничениях.

введите описание изображения здесь