2016-11-27 8 views
0

NavigationVCは、自分のアプリケーションと共有ビューの拡張機能の両方に表示されます。これには、検索ビューとテーブルビューだけが含まれています。私のアプリでは、正しく表示されますが、共有の拡張機能では、検索ビューが20ピクセル以上高くなり、ナビゲーションバーによって隠されてしまいます。これは意味をなさない。テーブルビューのフレームと検索ビュー、およびテーブルビューのコンテンツのインセットを印刷するときに、外観の間に矛盾があってはならない。アプリを実行するときにここでのスクリーンショットだ:iOS共有内線で正しくビューがレイアウトされない

enter image description here

、共有拡張子で実行されているスクリーンショット:

enter image description here

ここで私が持っている初期化/レイアウトコードは次のとおりです。

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ピクセルの違いを見ることができますが、それは外観に影響を与えません。テーブルビュー - は期待どおりに表示されます。検索バーが別の相対的な位置にある理由は私には意味がありません。

答えて

1

は解決策を見つけた:

ステータスバーのフレームがviewDidAppear後までに決定されていないと呼ばれているが、viewWillLayoutSubviewsは、その時点で呼び出されません。だからをviewDidAppearに設定すると修正されます。

searchViewのレイアウトに悪影響を及ぼしますが、tableViewのレイアウトに悪影響を与える理由については、通常のUIViewControllerの両方の追加プロパティであるためわかりません。

関連する問題