I have set
NavigationController.NavigationBar.Translucent = true;
Then add table and set frame to RootView Frame, and:
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
float y = this.TopLayoutGuide.Length;
table.ContentInset = new UIEdgeInsets (y, 0, 0, 0);
}
But, I Have table Scroll Bar under NavigationBar (I use monotouch):
Just put
navigationBar.translucent = NO;
you problem will solve :)
Other option is,,
Put following code.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if([self respondsToSelector:@selector(edgesForExtendedLayout)])
[self setEdgesForExtendedLayout:UIRectEdgeBottom];
}
Another option is ..
Why does UIViewController extend under UINavigationBar, while UITableViewController doesn't?
Try this:
if([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
}
I solved task with this simple code:
table.ScrollIndicatorInsets = new UIEdgeInsets(64, 0, 0, 0);
Most of the time, solutions that introduce a magic constant doesn't scale, for example if the next iPhone introduces a different navigation bar height we'll have to update our code.
Fortunately, Apple provided us cleaner ways of overcoming this issue, for example topLayoutGuide:
The topLayoutGuide property comes into play when a view controller is
frontmost onscreen. It indicates the highest vertical extent for
content that you don't want to appear behind a translucent or
transparent UIKit bar (such as a status or navigation bar)
Programmatically you can achieve with the following code snippet (the same can be achieved via IB too):
override func viewDidLoad() {
super.viewDidLoad()
automaticallyAdjustsScrollViewInsets = false
tableView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
tableView.topAnchor.constraint(equalTo:
topLayoutGuide.bottomAnchor),
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
}
Note: topLayoutGuide is deprecated in iOS 11, we should use the safeAreaLayoutGuide property of UIView instead.
This worked for me
let yOffset = UIApplication.shared.statusBarFrame.height + self.navigationController!.navigationBar.frame.size.height
tableView.contentInset = UIEdgeInsetsMake(yOffset, 0, 0, 0)