Ответ 1
Я глуп, я исправил это. Я не уверен, почему он отображается вверху в отладчике представления, но он был за другим UIView.
Эта проблема серьезно озадачивает меня. У меня есть небольшой UIView, который я использую, чтобы показать, какая кнопка выбрана. Однако это не отображается в моем приложении - оно должно быть в разделе "Местные действия", но не отображается:
Это прекрасно, подумал я, я просто отлажулю иерархию представлений и посмотрю, где она! И похоже, что именно он должен быть:
Кто-нибудь знает, что здесь может быть? Спасибо за помощь!
Я глуп, я исправил это. Я не уверен, почему он отображается вверху в отладчике представления, но он был за другим UIView.
У меня нет тонны информации о том, почему это произошло, но потребовалось несколько часов, чтобы узнать, что вызывает это для меня, поэтому, возможно, это поможет кому-то еще сэкономить:
Я программно создал два подъязыка (Subview A и Subview B) внутри контроллера вида; ни одна из которых не появилась на моем устройстве, даже если размер и позиции фреймов, альфа-значения и все другие обычные проблемы видимости все вычеркнуты. Subview A был подвид представлений контроллера представления, а Subview B был подпунктом Subview A. Ни на моем устройстве не было видно, но когда я посмотрел в иерархии просмотра отладки, я смог увидеть Subview B (хотя его супервизор, Subview A, не было видно).
Короче говоря, проблема была устранена, когда я удалил код, который изменял свойство маски Subview A layer. Здесь точный метод, который вызывался на слое:
extension CALayer {
func round(corners: UIRectCorner, withRadius radius: CGFloat, withBounds: CGRect? = nil) {
let path = UIBezierPath(roundedRect: withBounds ?? bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.mask = mask
}
}
Я использовал этот метод в прошлом без проблем, поэтому я уверен, что проблема была несколько косвенной, но, возможно, это укажет на кого-то в правильном направлении в будущем.
EDIT:
Проблема заключалась не только в коде, показанном выше, но и в том, что я изменял кадр Subview A после вызова round(). Как только я убедился, что только round() Subview A после его окончательной позиции и размера, все проблемы с устройством и отладчиком были решены.
У меня была такая же проблема в Xcode 9. Причина для меня заключалась в том, что я установил альфа представления в 0 в viewDidLoad, но не установил альфу обратно в 1.0. По какой-то причине иерархия просмотра Debug отобразила ее с альфа-версией 1.0...