How do I make my iOS7 UITableViewController NOT ap

2019-01-21 22:01发布

My root controller is a TabBarController (tabbed application). One of the tabs, is a UITableViewController. When I switch to that and scroll through the items, they show up under the status bar at the top (signal, battery, etc). I don't want that. I want that to be opaque or... something. It's visually jarring with the text of the table cells underlapping the status stuff.

Can I fix this from my Storyboard with some attributes setting that I don't understand? Or do I need to add some methods to my subclasses? Or maybe I need to wrap my UITableViewController with some other kind of controller?

I've tried numerous variations of the ViewController Layout and Extend Edges settings in the Storyboard attributes page, but none of them seem to change it for the better.

Update: I think my problem is very similar to iOS 7: UITableView shows under status bar. The only difference, is that I'm embedded in a TabBarController, and that case is as the root view. I tried the solution listed there of embedding in a NavigationController and setting Show Navigation Bar to False, but it didn't make any difference.

Screen Shots:

My storyboard (shrunk) showing a tabbed controller, with 2 children, one single view, and the other the table view.

Storyboard

Settings for the tab bar controller

tab bar controller settings

Settings for the table view controller

table view controller settings

What the app ends up looking like on my phone

enter image description here

How the Story Ended

Despite lots of answers below, none of them really worked. Some kind of a little, but not really. I tried the Embed in NavigationController approach as well, and that also had issues. What did work though, was this:

  1. Add UIViewController
  2. Set child controller relationship with it and tab bar controller (just like the other two I already had)
  3. Add a TableView (not controller) to the new UIViewController, position as desired, it'll snap to the bottom of the status bar
  4. Set the TableView's delegate and tableSource as the new controller
  5. Create a custom UIViewController subclass and update the class type of the controller in the storyboard
  6. Copy the table related methods from my custom UITableViewController subclass to my new subclass
  7. Select my prototype table cell from the original, and command+drag it to the new table view
  8. Happily delete the original TableViewController (and wrapper NavigationController) too
  9. Update the tab bar item to match the previous
  10. Chock another one up for "you're trying to hard"

13条回答
Viruses.
2楼-- · 2019-01-21 22:49

Looks like you just want to make the NavBar nonTranslucent, you could try using

[self.navigationController.navigationBar setTranslucent:NO];
查看更多
\"骚年 ilove
3楼-- · 2019-01-21 22:53

Have you tried adding something like this to the view controller's viewWillAppear method:

 if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
 {
    self.edgesForExtendedLayout = UIRectEdgeNone;
 }
查看更多
一纸荒年 Trace。
4楼-- · 2019-01-21 22:55

As of iOS 8.4 I didn't get anywhere with the various storyboard options listed in other answers.

I worked around this without resorting to any dimensional constants by putting a regular view in my tab controller, then filling that with a "Container View" which I then connected to my UITableViewController with an "embed" segue.

My table now respects both my navigation bar and the tab bar at the bottom.

查看更多
Rolldiameter
5楼-- · 2019-01-21 23:01

Try this in viewDidLoad:

self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);

20 px being the height of the status bar. If you have a navigation bar use 64 instead of 20

查看更多
戒情不戒烟
6楼-- · 2019-01-21 23:03

You can also solve this through Storyboard.

Select the Table View from the Project Outline (left side of the editor) and then go to Properties (right side) > Size inspector tab > Scroll View > Content Insets > Top

查看更多
放我归山
7楼-- · 2019-01-21 23:08

I encountered the same problem and the solution that worked for me was to add a section header view:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

I then added 20 to the origin.y of my text on the header.

I then changed the header height by adding 20 to the original height using the

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return myHeight+20;
}
查看更多
登录 后发表回答