UITableView + 상단에 콘텐츠 오프셋 추가


86

콘텐츠 영역의 크기에 영향을주지 않는 UITableView 상단에 빈 공간을 추가해야합니다. 콘텐츠를 아래로 이동하거나 빈 셀을 추가하는 것은 내가 원하는 것이 아닙니다. 대신 오프셋을 원합니다.

어떻게?

답변:


288

내가 당신을 따르고 있는지 잘 모르겠지만 같은 곤경에 처한 것 같아요. 제 경우에는 화면 상단의 ADBannerView에 약간의 공간을 제공해야하므로 제가 추가 한 viewDidLoad 메서드에 있습니다.

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

취하는 값은 UIEdgeInsetsMake (top, left, bottom, right)입니다.

또는 Swift와 동일합니다.

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

Swift 4.2 :

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

1
맨 위에 "로드 중"셀을 표시하지 않으려면 해당 셀이 렌더링 될 때 자아 삽입으로 다시 전환하고, reloadData가 발생하면 -50 맨 위로 다시 전환해야합니다. 감사 !
Daniel

23
스크롤 표시기를 조정할 수도 있습니다. [self.tableView setScrollIndicatorInsets : UIEdgeInsetsMake (50,0,0,0)];
bdev

8
예, 또는 더 나은 방법으로 다음과 같이 스크롤 표시기를 조정합니다. [self.tableView setScrollIndicatorInsets : [self.tableView contentInset]];
David Hernandez

5

"빈"헤더보기를 테이블에 추가 할 수 있습니다. 이렇게하면 오프셋이있는 테이블의 초기 모양이 제공되지만 스크롤을 시작하면 오프셋이 사라집니다. 그것이 당신이 원하는 것인지 확실하지 않습니다.

영구적 인 오프셋이 필요하고 아직 섹션 헤더를 사용하지 않는 경우 섹션 헤더에 대한 사용자 정의보기를 만들어 위와 비슷하게 오프셋을 만들 수 있습니다. 특히 섹션이 하나 뿐인 경우 영구적 인 오프셋 모양을 제공 할 수 있습니다. .

당신이 찾고있는 것 중 하나라도 들리면 샘플 코드를 게시 할 수 있습니다.


4

나는 Jigzat의 대답을 다음과 결합했습니다.

[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

.NET Framework 주위에 '보기' 를 래핑하려는 것 같습니다UITableView . 당신이있는 경우 UITableViewControllerIB에는 UITableView자동으로 설정됩니다 viewUITableViewController. view속성을 법선으로 변경 하고 거기에 UIView추가 UITableView하고 오프셋을 제공합니다.

--- 편집 --- 방금 내 게시물을 읽고 거의 의미가 없다고 생각했습니다. :)를 만들 때 UITableViewController(의사 코드) :

UITableViewController.view = UITableView

이것은 실제 테이블이 전체 공간을 차지하고 다른 뷰를 추가 할 수도 없음을 의미합니다. 그래서 당신은 변경해야

UITableViewController.view = UIView

그것에 당신의 테이블을 추가하십시오 UIView


0

이 답변을이 답변과 결합했습니다 : https://stackoverflow.com/a/9450345/1993937

tableView가 콘텐츠 삽입의 상단에 나타나도록하기 위해, 뷰가 처음 나타날 때 tableView를 약간 아래로 스크롤하여 상단의 공간이 잘리지 않도록합니다. (18은 나의 최고 간격)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.