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

Как настроить левое поле для прототипов ячеек в UITableView?

Если я создаю UITableViewController, например, через Файл → Новый проект... → iOS → Приложение "Мастер-детализация" в Xcode, создается UITableView с ячейкой прототипа.

Сгенерированная иерархия представлений:

UITableViewController view hierarchy

Левое "поле" автоматически создается между левым краем ячейки UIView и текстом

текста UILabel, как показано ниже, в оранжевом.

Prototype cell gap

Это приводит к соответствующему разграничению между краем экрана устройства и текстом UILabel во время выполнения:

Runtime gap

Итак, где ширина этого зазора и как его можно отрегулировать?

Элементы управления в Инспекторе размеров для UILabel выделены серым цветом:

enter image description here

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

4b9b3361

Ответ 1

Вам просто нужно установить свойство contentInset в виде таблицы. Вы можете установить значение в соответствии с вашими потребностями.

self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0);

РЕЗУЛЬТАТЫ ВЫХОДА

gzU7r.png

Ответ 2

Перейдите на Main.storyboard > выберите UITableViewCell > Attributes Inspector. Измените выпадающий список Разделитель со вкладок по умолчанию на Пользовательские вставки. Изменить левую вставку с 15 на 0

enter image description here

Ответ 3

Начиная с iOS 8 доступно свойство ячейки layoutMargins. Таким образом, правильный способ настройки полей полей устанавливает это свойство в tableView:cellForRowAtIndexPath или в вашем обычном UITableViewCell следующим образом:

override func awakeFromNib() {
    super.awakeFromNib()

    self.layoutMargins = UIEdgeInsetsZero //or UIEdgeInsetsMake(top, left, bottom, right)
    self.separatorInset = UIEdgeInsetsZero //if you also want to adjust separatorInset
}

Я надеюсь, что это может помочь кому-то.

Ответ 4

Просто добавьте метод в ваш код, как указано в ссылке ниже

Как устранить поле с левой стороны UITableView, не создавая пробел справа?

Метод похож на:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    [tableView setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    cell.preservesSuperviewLayoutMargins = NO;
    [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]){
    [cell setSeparatorInset:UIEdgeInsetsZero];
    }
}

Ответ 5

В TableView "Инспектор атрибутов" установите вкладки Separator в "Custom" с помощью Left = 0. Это все, что вам нужно сделать!

Ответ 6

Как упоминалось WTIFS, свойство UITableViewCell indentation - отличный способ отпечатать текстовые метки во встроенных стилях ячеек. Просто сделайте что-нибудь подобное, чтобы достичь хорошего левого края:

cell.indentationLevel = 2;

Это, однако, не будет работать для imageView.

Ответ 7

Если вы используете xib для своей ячейки, убедитесь, что параметр "Относительно поля" не установлен. Вы можете проверить это через инспектор, как показано на следующем снимке экрана:

enter image description here

Ответ 8

Вот быстрая версия ответа Четана:

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        tableView.separatorInset = UIEdgeInsets.zero
        tableView.layoutMargins = UIEdgeInsets.zero
        cell.preservesSuperviewLayoutMargins = false
        cell.layoutMargins = UIEdgeInsets.zero
        cell.separatorInset = UIEdgeInsets.zero
}

Ответ 9

Думаю, я просто придумал легкое решение. лол.

У верхнего ответа есть некоторая проблема... он уменьшает левый пробел, но приводит к правильному разрыву.

Я использовал ограничения в интерфейсе Builder.

Сначала добавьте в представление таблицы -15 left margin constrain.

Затем добавьте в ячейку таблицы Отступы, чтобы содержимое выглядело лучше.


Вот несколько пошаговых фото:

Добавьте ограничение. Не забудьте снять "расстояние до ближайшего соседа".

Add the constraint. Remember to uncheck the "spacing to nearest neighbor".

Ячейки таблицы будут перемещаться влево. Но кажется слишком близким к марже.

After adding the constraint

Итак, выберите ячейку таблицы и добавьте некоторые отступы в нужную область.

add some indentation

Ответ 10

И если вы хотите изменить только левое поле только текстовой метки ячейки, измените Horizontal Space Constraint 'Constant' на 16 или 8 на основе нужного дополнения. (Это в файле nib). Если вы не можете перейти к "константе" Выберите метку, измените координату x в представлении FrameRectangle, а затем щелкните на значке ограничения слева) введите описание изображения здесь