Изображение первой ячейки IOS TableView должно начинаться со строки состояния - PullRequest
1 голос
/ 05 июня 2019

Создано табличное представление, в котором первая ячейка содержит изображение. Я хочу, чтобы это изображение перекрывалось со строкой состояния, как показано на рисунке ниже. Как создать NavigationBar соответственно?

enter image description here

Попробовал следующую строку кода у меня не сработало.

tableView.contentInset = UIEdgeInsets(top: -UIApplication.shared.statusBarFrame.size.height, left: 0, bottom: 0, right: 0)

Также поиграл с безопасной областью и супер обзором, но не повезло с этим

Обновление:

Добавлен верхний пробел для ограничения superview -90 для представления таблицы. Изображение отображается в строке состояния. Хотелось бы узнать, это правильный способ или есть какой-либо другой способ

enter image description here

Обнаружено, что сверху пустое черное пространство из-за навигационного контроллера и навигационной панели, оно не работает, пока я не установлю верхнее пространство для супер просмотра, так как -90 следующее изображение

enter image description here

В storyBoard я могу проверить, что пустое место сверху занято элементом навигации

enter image description here

Ответы [ 7 ]

3 голосов
/ 07 июня 2019

Сначала настройте ограничение так же, как показано ниже:

Table Constraint

А затем создайте вид сверху / навигации с тремя кнопками, которые должны быть над таблицей с clear цветом фона. То же, что на изображении выше. И этот вид сверху top constraint должен быть top aligned с safe area.

Поместите ниже методы в свой контроллер:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: true)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}

А теперь, когда вы бежите, все будет выглядеть именно так, как вы хотите.

Table First cell should overwrite navigation bar

2 голосов
/ 12 июня 2019

установить табличное представление верхнее ограничение 0 на суперпредставление и в viewDidLoad использовать следующий код:

    tableView.contentInsetAdjustmentBehavior = .never

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.isTranslucent = true
    self.view.backgroundColor = UIColor.clear
2 голосов
/ 05 июня 2019

Вы пытались прикрепить верхнее ограничение не к безопасной зоне, а к супервизору?

Также вы можете попробовать это:

 self.contentInsetAdjustmentBehavior = .never 
1 голос
/ 05 июня 2019

Установите верхнее ограничение tableview 0 для superview и сделайте панель навигации прозрачной. Пожалуйста, используйте расширение, которое я сделал, чтобы сделать панель навигации прозрачной, если это необходимо.

extension UINavigationController {

    func transparent()  {
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()
        self.navigationBar.isTranslucent = true // set bartintColor if isTranslucent is false
        self.view.backgroundColor = UIColor.clear
    }

    func nonTransparent() {
        self.view.backgroundColor = UIColor.black.withAlphaComponent(0.75)
        self.navigationBar.isTranslucent = false
        self.navigationBar.barTintColor = UIColor.white
    }

}
1 голос
/ 05 июня 2019

Добавление верхних ограничений tableview.top к superview.top

0 голосов
/ 13 июня 2019

, чтобы создать этот макет:

  1. Вы должны закрепить свой tableView на view.TopAnchor

  2. Установите для contentInsetAdjustmentBehavior значение never tableView.contentInsetAdjustmentBehavior = .never

  3. Установите topAnchor imageView внутри вашей ячейки на contentView.topAnchor
  4. Установите фоновое изображение и теневое изображение навигационного контроллера: navigationBar.setBackgroundImage(UIImage(), for: .default) navigationBar.shadowImage = UIImage()

    , дайте мне знать, есливсе хорошо.должно работать

0 голосов
/ 07 июня 2019

Вы можете «Симулировать» панель навигации и достичь своей цели.

  1. Ограничение tableView на superview.top 0

  2. Установить tableview.contentInsetsAdjustmentsBehavior = .never

  3. На viewWillAppear вызов self.navigationController?.setNavigationBarHidden(true, animated: animated)

  4. Поместите кнопку «Назад» и другие элементы, которые должны быть на панели навигации над табличным представлением.Может использовать superview tableView, но не забудьте переместить их над tableView.Используйте верхнюю безопасную область для них, чтобы она заблокировалась так, как они размещены в навигационной панели.

Примечание. Эта функция отключит жест панорамирования края для перехода назад.

...