2017-10-11 23 views
6

Tôi đang điều chỉnh ứng dụng để hỗ trợ iPhone X. Tôi có phần mở rộng chia sẻ với bộ điều khiển chế độ xem tùy chỉnh. Tôi cần biết các thiết bị an toàn trong khu vực của thiết bị của tôi, nhưng phương pháp safeAreaInsets từ UIWindow được cung cấp bằng cách gọi UIApplication.shared.keyWindow không khả dụng trong Tiện ích mở rộng chia sẻ vì UIApplication.shared không hiển thị ở đó. Có cách nào để biết các giá trị từ thuộc tính safeAreaInsets trong Tiện ích mở rộng chia sẻ của tôi không?Phát hiện các khu vực an toàn trên Share Extension

Trả lời

1

safeAreaInsets là thuộc tính trên bất kỳ UIView nào; bạn có thể sử dụng điều đó trong Tiện ích mở rộng chia sẻ của mình. Bạn không cần phải yêu cầu UIApplication.shared.keyWindow cho safeAreaInsets - trên thực tế, bạn có thể không muốn làm điều đó, bởi vì nếu keyWindow chứa UINavigationController hoặc UITabBarController, những điều đó sẽ ảnh hưởng đến safeAreaInsets.

Nếu bạn có một cái nhìn sâu trong hệ thống phân cấp UIView của bạn, safeAreaInsets của nó được tính toán bằng cách nhìn vào quan điểm tổ tiên trong hệ thống phân cấp, và nhìn thấy nếu ai trong số họ có safeAreaInsets trùng với quan điểm của bạn.

Bạn có thể tìm thấy, tuy nhiên, rằng safeAreaInsets là bước đầu UIEdgeInsets.zero - những gì bạn sẽ muốn làm là thực hiện UIView.safeAreaInsetsDidChange() hoặc UIViewController.viewSafeAreaInsetsDidChange(), như vậy:

public override func safeAreaInsetsDidChange() { 
    if #available(iOS 11.0, *) { 
     super.safeAreaInsetsDidChange() 
     self.setNeedsUpdateConstraints() // or self.setNeedsLayout, etc. 
    } 
} 
Các vấn đề liên quan