1

我有一個UIViewController(使用Swift)pageviewcontroller導航控制器內部導致佈局問題

這只是一個簡單的項目列表。它被實現爲一個UIViewController,我已經添加了一個UITableView。這個'Items'視圖是通過我的幻燈片菜單實現中的代碼調用的,並且滑動菜單的初始視圖嵌入到NavigationController中 - 因此幻燈片菜單中的所有視圖都將顯示在導航控制器上。項目是調用這樣

self.openViewControllerBasedOnIdentifier("Items") 

這工作得很好,我得到這些幻燈片菜單視圖之一....

Initial Lists view from slider menu

我然後在右上角的添加按鈕,你可以推動添加新的項目。添加按鈕調出一個PageViewController。我使用頁面視圖,因爲有多個頁面的細節與正在添加的項目相關聯。這也適用於我得到的pageviewcontroller啓動,我可以翻頁。

問題是頁面上元素的位置在某些情況下(它不一致)轉移。

當我最初顯示PageViewController的第一頁時,我看到了我設計的佈局(在左下方)。如果我只是從文本字段中退出,或者如果我滑動到第2頁,然後滑回第1頁,則會看到正確的圖像。整個視圖跳起來!

我嘗試翻轉故事板中的所有不同設置。我甚至將大部分繪圖移動到代碼中並從故事板中移出以便手動設置約束。這些是我玩過的設置。嘗試了很多組合,但他們現在大部分都關閉了。

enter image description here

這裏是之前和之後。我該如何阻止視圖跳躍和跳躍。另外,有趣的是,如果我從頁面3滑動到頁面2,則頁面2向上移動。如果我繼續返回到第1頁,然後再滑回到第2頁,則第2頁返回到正確的位置。所以深入我輸入page-2的方式是不同的佈局。從1到2,第2頁是正確的。從3到2,第2頁向上移動。

enter image description here

我不能讓佈局停留在一個地方。

另一種選擇是在頁面視圖控制器中關閉NavigationController並在沒有它的情況下處理。

所以......

1)我怎麼能停止跳躍 - 最好的情況下

2)我怎麼能關閉導航控制器時pageviewcontroller達 - 第二個選項

我的pageviewcontroller的頁面通過此代碼調用

instantiateViewController(withIdentifier: "itemDetail\(num)ViewController") 

其中'num'是1,2或3.使用索引數組和viewControllerBefore以及viewControllerAfter方法。分頁本身工作正常。

謝謝

回答

0

這並沒有回答如何使故事板工作的問題。這仍然是一個謎。但是,通過執行以下操作,我能夠解決轉換佈局的奇怪行爲。

我從Storyboard中刪除了所有繪圖,並將所有內容都放在代碼中。例如,我已經定義了一個容器視圖...

// The container 
let containerView: UIView = { 
    let view = UIView() 
    view.backgroundColor = UIColor.white 
    view.translatesAutoresizingMaskIntoConstraints = false 
    view.layer.masksToBounds = true 
    return view 
}() 

再後來我相對於UIViewController的視圖

view.addSubview(containerView) 

    containerView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true 
    containerView.topAnchor.constraint(equalTo: view.topAnchor, constant: 155).isActive = true 
    containerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: 0).isActive = true 
    containerView.heightAnchor.constraint(equalTo: view.heightAnchor, constant: -155).isActive = true 

同樣的容器放置,我已經定義的所有其他控制的代碼中的然後將它們添加到containerView子視圖中,然後全部相對於containerView。

這使一切就緒,我的PageViewController

0

我有同樣的問題的頁面之間滑動,並找到了解決辦法。您只需要在您的viewDidLoad中禁用automaticallyAdjustsScrollViewInsets。這裏是我的代碼:

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    self.dataSource = self 

    self.automaticallyAdjustsScrollViewInsets = false 
    if let detailsVC = viewControllersList.first as? DetailsViewController 
    { 
     detailsVC.delegate = self 
     self.setViewControllers([detailsVC], direction: .forward, animated: true, completion: nil) 
    } 
} 

Credits to this answer