Подтвердить что ты не робот

Просмотр отображается в иерархии просмотра отладки, но НЕ на устройстве/сим

Эта проблема серьезно озадачивает меня. У меня есть небольшой UIView, который я использую, чтобы показать, какая кнопка выбрана. Однако это не отображается в моем приложении - оно должно быть в разделе "Местные действия", но не отображается:

Image

Это прекрасно, подумал я, я просто отлажулю иерархию представлений и посмотрю, где она! И похоже, что именно он должен быть:

View Hierarchy3D View — it's on top of everything!

Кто-нибудь знает, что здесь может быть? Спасибо за помощь!

4b9b3361

Ответ 1

Я глуп, я исправил это. Я не уверен, почему он отображается вверху в отладчике представления, но он был за другим UIView.

Ответ 2

У меня нет тонны информации о том, почему это произошло, но потребовалось несколько часов, чтобы узнать, что вызывает это для меня, поэтому, возможно, это поможет кому-то еще сэкономить:

Я программно создал два подъязыка (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 после его окончательной позиции и размера, все проблемы с устройством и отладчиком были решены.

Ответ 3

У меня была такая же проблема в Xcode 9. Причина для меня заключалась в том, что я установил альфа представления в 0 в viewDidLoad, но не установил альфу обратно в 1.0. По какой-то причине иерархия просмотра Debug отобразила ее с альфа-версией 1.0...