Как iOS UITableView в NavigationBar? - программирование

Как iOS UITableView в NavigationBar?

Я установил

NavigationController.NavigationBar.Translucent = true;

Затем добавьте таблицу и установите фрейм в RootView Frame и:

    public override void ViewDidLayoutSubviews()
        {
            base.ViewDidLayoutSubviews();
            float y = this.TopLayoutGuide.Length;
            table.ContentInset = new UIEdgeInsets (y, 0, 0, 0);
        }

Но у меня есть панель прокрутки стола в разделе NavigationBar (я использую monotouch):

enter image description here

4b9b3361

Ответ 1

Я решил задачу с помощью этого простого кода:

table.ScrollIndicatorInsets = new UIEdgeInsets(64, 0, 0, 0);

Ответ 2

Просто поместите

navigationBar.translucent = NO; вы решите проблему:)

Другой вариант:,

Введите следующий код.

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if([self respondsToSelector:@selector(edgesForExtendedLayout)])
        [self setEdgesForExtendedLayout:UIRectEdgeBottom];
}

Другой вариант:

Почему UIViewController распространяется под UINavigationBar, а UITableViewController не работает?

Ответ 3

Попробуйте следующее:

    if([self respondsToSelector:@selector(edgesForExtendedLayout)])
    {
       self.edgesForExtendedLayout = UIRectEdgeNone;
       self.automaticallyAdjustsScrollViewInsets = NO;
    }

Ответ 4

Это сработало для меня tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)

Ответ 5

В большинстве случаев решения, которые вводят волшебную константу, не масштабируются, например, если следующий iPhone вводит другую высоту навигационной панели, нам нужно будет обновить наш код.

К счастью, Apple предоставила нам более чистые способы преодоления этой проблемы, например topLayoutGuide:

Свойство topLayoutGuide вступает в игру, когда контроллер вида самый передний экран. Это указывает на наибольшую вертикальную протяженность для содержимое, которое вы не хотите появляться за полупрозрачным или прозрачная панель UIKit (например, состояние или панель навигации)

Программно вы можете достичь с помощью следующего фрагмента кода (то же самое можно сделать и с помощью IB):

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)
  ])
}

Примечание. topLayoutGuide устарел в iOS 11, мы должны использовать свойство safeAreaLayoutGuide UIView,