我有一個NavigationVC,我在我的應用程序和共享擴展中都顯示了該圖像,其中只包含搜索視圖和表格視圖。在我的應用中,它看起來是正確的,但在我的共享擴展中,搜索視圖出現20像素太高,並被導航欄遮擋。這樣做沒有意義,因爲打印出表格視圖的框架,搜索視圖以及表格視圖的內容插圖時,它們的外觀之間不應該存在差異。下面是運行應用程序時的截圖:在股延長運行時在iOS共享擴展中未正確佈局的視圖
而且截圖:
這裏的初始化/佈局代碼,我有:
override open func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.tableView)
self.view.addSubview(self.searchView)
}
override open func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.frame = self.view.bounds
var tableViewContentInsetTop: CGFloat
if let navigationBar = self.navigationController?.navigationBar {
tableViewContentInsetTop = navigationBar.frame.origin.y + navigationBar.frame.size.height
} else {
tableViewContentInsetTop = 0
}
self.searchView.frame = CGRect(
x: 0,
y: self.tableView.frame.origin.y + tableViewContentInsetTop,
width: self.tableView.frame.size.width,
height: NewConversationViewController.searchViewHeight())
tableViewContentInsetTop += self.searchView.bounds.size.height
self.tableView.contentInset.top = tableViewContentInsetTop
}
非常簡單 - 它們都被添加到相同的視圖。計算導航欄底部的y座標,並在其中放置搜索視圖。然後,表格視圖除了其高度之外還包含搜索欄y的內容。結果,你會發現,他們會保持一致。實際情況是,tableview正確顯示,正確的內容插入,但搜索欄出現20像素太高。
20個像素可能與狀態欄框架(20個像素高,通常但不總是)未在共享擴展上提供的事實有關。我在這兩種情況下打印了一些日誌。
應用:
table view frame: (0.0, 0.0, 375.0, 667.0)
search view frame: (0.0, 64.0, 375.0, 40.0)
navigation bar bounds: (0.0, 0.0, 375.0, 44.0)
navigation bar frame: (0.0, 20.0, 375.0, 44.0)
navigation controller frame: (0.0, 0.0, 375.0, 667.0)
status bar frame: (0.0, 0.0, 375.0, 20.0)
application bounds: (0.0, 0.0, 375.0, 667.0)
table view content inset: 104.0
分享擴展:
table view frame: (0.0, 0.0, 375.0, 667.0)
search view frame: (0.0, 44.0, 375.0, 40.0)
navigation bar bounds: (0.0, 0.0, 375.0, 44.0)
navigation bar frame: (0.0, 0.0, 375.0, 44.0)
navigation controller frame: (0.0, 0.0, 375.0, 667.0)
status bar frame: (0.0, 0.0, 0.0, 0.0)
application bounds: (0.0, 0.0, 375.0, 667.0)
table view content inset: 84.0
你可以看到造成不被佔狀態欄架的20像素的差別,但不影響外觀表視圖 - 仍然按預期顯示。這對我來說沒有意義,爲什麼搜索欄會處於與它不同的相對位置。