Ограничения привязки не соблюдаются в Xcode 10 / iOS 12 - PullRequest
0 голосов
/ 19 сентября 2018

Все это работало вчера под Xcode 9 и iOS 11;однако после обновления до Xcode 10 и iOS 12 представление больше не отображается.У меня было видео, отображаемое в представлении.Сегодня я слышал, но не видел видео.Я проверил кадр и обнаружил, что он равен нулю, что объясняет проблему.Однако ничего не изменилось по сравнению с предыдущей версией.Я удалил видео и только что посмотрел на кадр представления после применения ограничений привязки, и все они равны нулю.

import UIKit
import AVKit

class VideoView: UIView {

private var videoURL:URL!
private var parentView:UIView!
private var avPlayer:AVPlayer!
private var avPlayerLayer:AVPlayerLayer!

init(url:URL, parentView:UIView) {
    super.init(frame: .zero)

    self.videoURL = url
    self.parentView = parentView

    setup()
}

private func setup() {
    self.translatesAutoresizingMaskIntoConstraints = false
    self.parentView.addSubview(self)

    self.topAnchor.constraint(equalTo: self.parentView.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
    self.leadingAnchor.constraint(equalTo: self.parentView.leadingAnchor, constant: 8).isActive = true
    self.trailingAnchor.constraint(equalTo: self.parentView.trailingAnchor, constant: -8).isActive = true
    self.heightAnchor.constraint(equalToConstant: 200).isActive = true

    print(self.parentView.frame)
    print(self.frame)
}


override init(frame: CGRect) {
    super.init(frame: frame)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
}

обратите внимание на два оператора печати в конце setup().parentView возврат 0,0,414,736.Представление self возвращает 0,0,0,0.

Если в Init я установлю размер кадра, он будет соответствовать;тем не менее, он не применяет якорные ограничения, поэтому размер представления останется таким, каким я его ввел в init.

Похоже, что якорные ограничения вообще не принимаются во внимание.В них нет ошибок в отладчике, и, как мы видим, translatesAutoresizingMaskIntoConstraints установлен на false, а для всех ограничений isActive установлен на true.

Изменились только версия Xcode и iOS.Чего мне не хватает?

Обновление 1:

Если я создаю ярлык и добавляю его в self, ярлык отображается нормально.Если я создаю цвет фона для self, это также показывает отлично, включая правильную высоту, как установлено с помощью якорных ограничений.Тем не менее, кадр остается на нуле.Поэтому, когда вы пытаетесь добавить AVPlayerLayer, устанавливая его кадр в пределах self, он не работает, потому что self остается на нуле.Таким образом, остается вопрос, почему размеры кадра не меняются после инициализации.

Обновление 2:

Я добавил self.layoutIfNeeded() сразу после применения якорных ограничений, и это, похоже, решило проблему.Хотя, глядя на рамку для self, я получаю -199,-100,398,200 Не могу сказать, что понимаю значения для X and Y.Тем не менее, layOutIfNeeded, кажется, решил проблему, хотя почему это требуется в Xcode 10 / iOS 12, также является загадкой.

1 Ответ

0 голосов
/ 19 сентября 2018

Я опубликовал то, что кажется ответом во втором обновлении, но для ясности:

Я добавил self.layoutIfNeeded() сразу после применения якорных ограничений, и это, похоже, решило проблему.Хотя, глядя на рамку для себя, я получаю -199,-100,398,200 Не могу сказать, что понимаю значения для X and Y.Тем не менее, layOutIfNeeded, похоже, решил проблему, хотя почему это требуется в Xcode 10 / iOS 12, также является загадкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...