Swift4: как установить верхнее ограничение, когда у вас есть навигационный контроллер?

#swift #uiview #uiimageview #constraints

#swift #uiview #uiimageview #ограничения

Вопрос:

скриншот Я создал представление, в котором я поместил изображение и представление. Я программно добавил ограничения к обоим своим представлениям, чтобы они были идеально сосредоточены на каждом выбранном мной экране, но когда я запускаю приложение на iPhone XSMax, я получаю белую полосу внизу. Итак, я предполагаю, что я совершаю ошибку с моим верхним ограничением, как мне обрабатывать верхние ограничения, когда у меня есть панель навигации?

  func imageAndColorView() {

    view.addSubview(imageView)
    view.addSubview(colorView)
    imageView.translatesAutoresizingMaskIntoConstraints = false

    imageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

    colorView.translatesAutoresizingMaskIntoConstraints = false
    colorView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    colorView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    colorView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    colorView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

    imageView.image = UIImage(named: BackgroundImageKey)
    view.sendSubviewToBack(imageView)
    view.insertSubview(colorView, aboveSubview: imageView)
}
  

Да, я вызвал это в своем viewDidLoad.

Комментарии:

1. Добавьте скриншот с вашей проблемой

2. Не могли бы вы попробовать вызвать эту функцию в viewDidAppear.

3. @RajeshKumarR готово

4. @ManojRlogical почему это должно работать? В моем коде есть проблема

5. Дело в том, что использование вашего кода в новом проекте, настройка цвета bg colorView и запуск на XSMax в iOS12 дают результат, отличный от вашего скриншота (он полностью заполняет вид сверху вниз). Какова ваша настройка?

Ответ №1:

Для iPhoneX, приведенного выше, вы должны использовать safeAreaLayoutGuide в topAnchor и bottomAnchor. введите описание изображения здесь

 func imageAndColorView() {

        view.addSubview(imageView)
        view.addSubview(colorView)
        imageView.translatesAutoresizingMaskIntoConstraints = false

        imageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        colorView.translatesAutoresizingMaskIntoConstraints = false
        colorView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        colorView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
        colorView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        colorView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        imageView.image = UIImage(named: BackgroundImageKey)
        view.sendSubviewToBack(imageView)
        view.insertSubview(colorView, aboveSubview: imageView)
    }
  

просто замените свою функцию этим кодом, это будет выглядеть так, и я надеюсь, что ваша проблема будет решена.

Комментарии:

1. На самом деле все наоборот… OP хочет избежать (например, не использовать) безопасных областей и заполнить весь вид.

2. тогда не указывайте safeAreaLayoutGuide в bottomAnchor

3. У меня есть еще один вопрос, могу ли я установить некоторые ограничения программно, а другие — в раскадровке?