UITableView ContentInsets прокручивает содержимое по горизонтали

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

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 130.0, 768.0)];
    self.horizontalTableView.contentInset = UIEdgeInsetsMake(0.0, 10.0, 0.0, 0.0);

Нужно ли использовать свойство contentOffset contentSize tableview.


person Ameet Dhas    schedule 19.02.2013    source источник
comment
попробуйте изменить положение x кадра с 0 на 10....   -  person Baby Groot    schedule 19.02.2013


Ответы (4)


Я думаю, что лучшим решением является создание подкласса UITableViewCell и установка кадров его подвидов в методе layoutSubviews в соответствии с вашими требованиями к интервалам. Это будет намного чище и расширяемее. Пристальный взгляд на ячейки tableview хорошо подходит для этого.

Но есть и несколько коротких путей к этому, каждый со своими недостатками:

  1. Установить отступ для ячеек

    -(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath

    Этот метод добавит отступ к содержимому вашей ячейки (левое поле). Но разделитель ячеек будет занимать фактическую ширину ячейки, то есть ширину таблицы. Поэтому вам нужно установить стиль разделителя равным none, чтобы он не отображался. Но не применимо, если вам нужен разделитель ячеек.

  2. Уменьшите размер всего фрейма tableViews

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

Поскольку вы сделали это, установив contentInset, вы должны были заметить обсуждение этого в Документы.

Используйте это свойство, чтобы добавить область прокрутки вокруг содержимого. Единицей размера являются баллы. Значение по умолчанию — UIEdgeInsetsZero.

Я думал, что игра с contentOffset и contentSize поможет достичь полей, но для меня изменение значений никогда не имело никакого эффекта. Вероятно, как сказал Андрей, они могут управляться внутри компании. Но я хотел бы услышать больше об этих свойствах и их отраженном поведении.

ИЗМЕНИТЬ

contentOffset и contentSize унаследованы от UIScrollView и означают то же самое в UITableView, что и подкласс UIScrollView.

person egghese    schedule 07.08.2013

Другой способ, который может работать, заключается в том, что вместо установки кадра tableView вы можете установить кадр для ячейки contentView, что-то вроде этого,

- (void) layoutSubviews
{
    [super layoutSubviews];

    CGRect frame = self.contentView.frame;
    frame.size.width = frame.size.width * 0.9; //90% of total width
    frame.origin.x = self.center.x - (frame.size.width/2); //center the contentView
    self.contentView.frame = frame;
}

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

счастливого кодирования ..!

person akshaynhegde    schedule 14.09.2013

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

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

person Ed Chin    schedule 19.02.2013

Кажется, в UITableView есть странная ошибка, поэтому вставки по краям работают нормально только для верхних и нижних краев. Лучшее (но все же уродливое) решение — переместить контент в ваших ячейках.

Свойства contentOffset и contentSize нельзя менять вручную в таблицах, это внутренние дела.

person Andrey Chevozerov    schedule 07.08.2013
comment
contentOffset and contentSize properties shouldn't be changed manually in tables, it's kinda internal things. Можете ли вы сказать мне, почему? Хотел бы услышать больше об этом. - person egghese; 07.08.2013
comment
Что ж, UITableView является подклассом UIScrollView, поэтому он также имеет все свойства, связанные с прокруткой, такие как contentOffset и contentSize. Свойство contentSize управляется самой таблицей, поэтому вам просто не нужно изменять его вручную. Другое свойство contentOffset, скорее всего, доступно только для чтения, и вам лучше не изменять его напрямую даже для UIScrollView. - person Andrey Chevozerov; 07.08.2013