Положение навигационной панели вверху безопасной зоны - PullRequest
0 голосов
/ 04 декабря 2018

Я обновился до нового iphone и обновил свои приложения.Я добавил в макет x / xr / xs, чтобы черные границы исчезли.

У меня есть панель навигации в верхней части моего просмотра, но теперь она слишком сильно врезается в строку состояния?Как это исправить?Делать это программно, а не раскадровкой (для изучения кода).

Какой-то код:

func buildTopbar()
{
    statusbar = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 20));

    statusbar.backgroundColor = UIColor(red: 247/255, green: 247/255, blue: 247/255, alpha: 1.0);

    navigationbar = UINavigationBar(frame: CGRect(x: 0, y: 20, width: self.view.bounds.width, height: 44));

    navigationbar.barTintColor = UIColor(red: 247/255, green: 247/255, blue: 247/255, alpha: 1.0);

    let texta = UIBarButtonItem(title: "A", style: .plain, target: self, action: #selector(settingToolbar(sender:)));
    let textb = UIBarButtonItem(title: "B", style: .plain, target: self, action: #selector(inviteToolbar(sender:)));

    texta.tintColor = ColorHelper.primaryColor();
    textb.tintColor = ColorHelper.primaryColor();

    ...

    navigationbar.setItems([title], animated: false);

    self.view.addSubview(statusbar);
    self.view.addSubview(navigationbar);
}

Я установил в строке состояния значение 20, как и в старых телефонах.

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Я бы посоветовал вам взять высоту UIScreen и поставить ее в условие:

if UIScreen.main.bounds.size.height > 750 {
        navigationBar  = UINavigationBar(frame: CGRect(x: 0, y: 43, width: view.frame.size.width, height: 44))
    }
    else{
        navigationBar  = UINavigationBar(frame: CGRect(x: 0, y: 20, width: view.frame.size.width, height: 44))
    }

это может не сработать, если у вашего вида вид с прокруткой, а его высота больше значения по умолчанию, тогдапопробуйте: -

view.bounds.size.height

0 голосов
/ 04 декабря 2018

Высота строки состояния теперь изменилась с 20pt до 44pt (с iPhone X и далее).Если вы хотите использовать свой существующий код, вам нужно применить специфичную для устройства проверку высоты строки состояния.

Вот сообщение, которое более подробно объясняет расположение навигационной панели (для устройств iPhone X и более поздних версий):

Какая высота верхней панели iPhone X?

0 голосов
/ 04 декабря 2018

Я предлагаю добавить некоторые ограничения для верхней части. И установить значения ограничений в зависимости от размера вашего устройства iPhone или версий iOS.Недавно я достиг этого, установив так.Мои проблемы были с версией iOS, мой взгляд близок к строке состояния. Так что я установил некоторые ограничения программно и обработал это.Таким образом, это не повлияет на экраны iphone ниже iphone 7.

In Viewdidload()
     if #available(iOS 11, *)  {
            }
            else{
                topConstraints.constant = 20
            }

Здесь я проверил версию.Вы также можете проверить устройство, и вы можете установить ограничения.Если вы хотите проверить устройство, дайте мне знать.

Надеюсь, это сработает !!

0 голосов
/ 04 декабря 2018

Я бы порекомендовал создать UINavigationController и добавить ваш контроллер в этот Navigation Controller, он автоматически настроит панель навигации.

В случае, если вы хотите вручную добавить панель навигации.Вы должны установить правую позицию кадра Y.

Чтобы рассчитать начальную позицию Y панели навигации

let startingYPos = UIApplication.sharedApplication.statusBarFrame.size.height;
navigationbar = UINavigationBar(frame: CGRect(x: 0, y: startingYPos, width: self.view.bounds.width, height: 44));
...