Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set UITableView content inset permanently

In my app I have a UISearchBar under UINavigationBar so it is always visible to user. In that case I had to set contentInset with extra 44px so the UIScrollView will be scrolling under UISearchBar (exactly like in Contacts.app). And there would be no problem with static UITableView's but in my case I have to reload it's contents, switch to UISearchDisplayControlleretc. So when I call:

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

Everything works until e.g. I pull to refresh... (for this I use SSPullToRefresh).

So my question is: How can I set contentInset permanently so I wouldn't have to worry about any changes happening to data inside UITableView?

like image 888
cojoj Avatar asked Feb 25 '14 16:02

cojoj


2 Answers

Probably it was some sort of my mistake because of me messing with autolayouts and storyboard but I found an answer.

You have to take care of this little guy in View Controller's Attribute Inspector asvi

It must be unchecked so the default contentInset wouldn't be set after any change. After that it is just adding one-liner to viewDidLoad:

[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)]; // 108 is only example 

iOS 11, Xcode 9 update

Looks like the previous solution is no longer a correct one if it comes to iOS 11 and Xcode 9. automaticallyAdjustsScrollViewInsets has been deprecated and right now to achieve similar effect you have to go to Size Inspector where you can find this: enter image description here
Also, you can achieve the same in code:

if #available(iOS 11.0, *) {     scrollView.contentInsetAdjustmentBehavior = .never } else {     automaticallyAdjustsScrollViewInsets = false } 
like image 169
cojoj Avatar answered Sep 19 '22 13:09

cojoj


In Swift:

override func viewDidLayoutSubviews() {       super.viewDidLayoutSubviews()       self.tableView.contentInset = UIEdgeInsets(top: 108, left: 0, bottom: 0, right: 0) } 
like image 31
rmooney Avatar answered Sep 21 '22 13:09

rmooney