2017-10-07 112 views
0

我想要的:我想拖動一個viewController的整個視圖,使用平移手勢識別器關閉父視圖控制器。NavigationBar上的iOS 11下拉 - 酒吧的高度變化?

問題:當我向下拖動視圖時,導航條會降低其高度並且看起來不太好。當視圖返回到原始位置時,navigationBar將返回到默認大小。我想讓navigationBar保持其大小。我還嘗試使用navigationController/-bar的新大標題和其他一些屬性,但這並沒有解決問題。 注:一切正常已iOS的前11

Gif navigationBar problem

我的代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(dragViewDown(_:))) 
    navigationController!.view.addGestureRecognizer(panGesture) 
} 

@IBAction func dragViewDown(_ gesture: UIPanGestureRecognizer) { 
    if let dragView = gesture.view { 
     let translation = gesture.translation(in: dragView) 

     dragView.center.y = (dragView.center.y + translation.y) 

     gesture.setTranslation(CGPoint.zero, in: dragView) 
    } 
} 

這個測試項目中只有一個的viewController和不提供解僱,但問題與我的工作項目相同。

我還上傳了該項目的GitHub:https://github.com/maddinK7/navitationBar-pull-down-problem

有沒有人有一個想法如何解決這個問題?提前致謝。

回答

2

我想要的導航欄留在它的大小

住在它的大小。如果您在拖動之前,之中和之後檢查導航欄的邊界大小高度,您會發現它始終保持相同(可能爲44)。有什麼變化是圖形擴展導致導航欄的繪圖擴展到狀態欄的後面。當你將所有東西從屏幕的頂部拉開時,它不能這樣做,因爲它不再位於狀態欄的頂部。 iOS版11將更加嚴格執行這本圖擴展的方式,可能是因爲它做在iPhone上的X.

一種特殊的方式那麼,讓我們確保你這樣做正確:

  • 確保導航欄的頂部約束固定在安全區域佈局指南的頂部,常量爲零。

  • 確保導航欄有一個代表,該代表從position(forBar:)返回.topAttached

如果你正在做這兩件事情並且沒有幫助,你必須完全用其他方式實現它。使視圖可以像這樣直接拖動,沒有自定義父視圖控制器,總是令人懷疑。

+0

謝謝,我會試試看。 你是對的,這是沒有意義的。但這只是一個顯示問題的測試項目。在我真正的項目中,我使用這個將viewController關閉到父級viewController,但問題是一樣的。我認爲沒關係,不是嗎? – Martin

+0

我只是無法讓它工作。我決定放棄拖動整個視圖的想法,而是在導航欄中使用UIBarButtonItem。 – Martin

-1

當UINavigationController附加到頂部時,系統會在導航背景中添加安全區頂部邊距。

(注意:背景當偏移值爲1之間和餘量不會改變0)

所以,你必須處理由手柄手勢偏移改變右偏移和內容附接/拆卸頂部事件插圖。

你可以在我的lib例子中試試這個解決方案。 ;) 我的例子包括UINavigationController中的UITableViewController,所以它會比較複雜。

https://github.com/showang/OverlayModalViewController

+0

請直接在此發佈您的答案,而不是僅提供某個項目的鏈接,這些項目未來可能無法訪問。 –

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18770532) –

+0

對不起,我已經編輯了我的答案。 – Showang