, Тем не менее, layOutIfNeeded, похоже, решил проблему, хотя почему это требуется в Xcode 10 / iOS 12, также является загадкой.

то работало вчера под 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)

Ваш ответ на вопрос