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の内容に加えて、その高さが表示されます。結果は、彼らが一直線になることを期待するでしょう。実際に何が起こるかは、適切なコンテンツが挿入された状態でテーブルビューが正しく表示されますが、検索バーの高さが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ピクセルの違いを見ることができますが、それは外観に影響を与えません。テーブルビュー - は期待どおりに表示されます。検索バーが別の相対的な位置にある理由は私には意味がありません。