UITableView + Додати зміщення вмісту вгорі


86

Мені потрібно додати трохи вільного місця у верхній частині мого UITableView, що не впливає на розмір області вмісту. Зміщення вмісту вниз або додавання порожньої комірки НЕ те, що я хочу робити. Натомість я просто хочу компенсацію.

Як?

Відповіді:


288

Я не впевнений, чи йду за тобою, але думаю, що в мене така ж скрута. У моєму випадку я повинен дати трохи місця для ADBannerView у верхній частині екрана, щоб те, що я зробив, було в методі viewDidLoad, який я додав:

[self.tableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];

значення, які він приймає, - UIEdgeInsetsMake (зверху, ліворуч, знизу, праворуч).

Альтернативно те ж саме зі Swift:

self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

Свіфт 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)

1
Це потрібно для того, щоб не показати клітинку "завантаження" вгорі, поверніться назад до вставки ego, коли ця комірка відтворена, і поверніться до -50 зверху, коли відбувається reloadData. Дякую !
Даніель

23
Можливо, вам доведеться також відрегулювати індикатор прокрутки: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev

8
Так, або навіть краще, налаштуйте індикатор прокрутки таким чином: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
Девід Ернандес,

5

Ви можете додати "порожній" вид заголовка до таблиці ... це дасть початковий вигляд таблиці, щоб мати зміщення, але як тільки ви почнете прокручувати зміщення, зникне. НЕ впевнений, що це те, що ти хочеш.

Якщо вам потрібен постійний зсув і ви вже не використовуєте заголовки розділів, тоді ви можете створити зсув подібно до вищезазначеного, створивши власні види для заголовків розділів, особливо якщо у вас лише один розділ, це може дати вам вигляд постійного зміщення .

Я можу розмістити зразок коду, якщо здається, що це те, що ви шукаєте.


4

Я поєднав відповідь Джигзата з:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 320, 1) animated:NO];

в

- (void)viewDidLoad

отже перша комірка не знаходиться вгорі.


4

Свіфт 5.1

додати наступне у viewDidLoad

tableView.contentInset.top = 100

Дійсно, це все, що до цього потрібно.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}

2

Здається, ви хочете обернути "погляд" навколо свого UITableView. Якщо у вас є UITableViewControllerIB UITableView, автоматично буде встановлено значення viewof UITableViewController. Ви змінюєте viewвластивість на нормальне UIViewі додаєте UITableViewтуди своє і надаєте йому компенсацію.

--- Редагувати --- Я щойно прочитав свою публікацію і вважав, що мало сенсу :) Коли ви створюєте a, UITableViewControllerви отримуєте це (у псевдокоді):

UITableViewController.view = UITableView

Це означає, що фактична таблиця займе весь простір, і ви навіть не можете додати інші види. Тож вам потрібно змінити

UITableViewController.view = UIView

і додайте до цього свою таблицю UIView


0

Я поєднав цю відповідь з цією: https://stackoverflow.com/a/9450345/1993937

Щоб таблицяView відображалася у верхній частині вставки вмісту, тому простір у верхній частині не буде відрізано, якщо tableView злегка прокрутить вниз, коли спочатку з’явиться подання. (18 - це мій верхній пробіл)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.