簡體   English   中英

導航控制器內部的pageviewcontroller導致布局問題

[英]pageviewcontroller inside navigation controller causing layout problems

我有一個UIViewController(使用Swift)

這只是項目的簡單列表。 它實現為我添加了UITableView的UIViewController。 此“項目”視圖是通過我的幻燈片菜單實現中的此代碼調用的,並且幻燈片菜單的初始視圖被嵌入到NavigationController中-因此,幻燈片菜單中的所有視圖都位於導航控制器上。 項目是這樣調用的那些幻燈片菜單視圖之一

self.openViewControllerBasedOnIdentifier("Items")

這個工作正常,我明白了。

滑塊菜單中的“初始列表”視圖

然后,我在右上角有一個添加按鈕,您可以按此按鈕添加新項目。 添加按鈕將調出PageViewController。 我使用頁面視圖,因為有多個頁面與要添加的項目相關聯的詳細信息。 到目前為止,這也起作用,因為我啟動了pageviewcontroller,並且可以在頁面之間切換。

問題是在某些情況下頁面上元素的位置會發生變化(不一致)。

當我最初顯示PageViewController的第一頁時,我看到了我設計的布局(在左下方)。 如果我只是在“文本”字段中跳出標簽,或者如果我滑動到第二頁然后又滑動回到第一頁,那么我會看到正確的圖像。 整個視野跳起來!

我嘗試翻轉情節提要中有關的所有不同設置。 為了手動設置約束,我什至將大部分圖形移入了代碼,並移到了情節提要中。 這些是我玩過的設置。 嘗試了很多組合,但現在大多數都沒有了。

在此處輸入圖片說明

這是之前和之后。 如何停止視圖上下跳躍。 另外,有趣的是,如果我從第3頁滑動到第2頁,則第2頁向上移動。 如果我繼續回到第1頁,然后再滑動回到第2頁,則第2頁又回到了正確的位置。 因此,深化我進入第二頁的方式是不同的布局。 從1到2,第2頁正確。 從3到2,將第2頁上移。

在此處輸入圖片說明

我無法將布局留在一個位置。

另一個選擇是在頁面視圖控制器中時關閉NavigationController,然后不進行處理。

所以...

1)我怎樣才能停止跳躍- 最好的情況

2)如何在pageviewcontroller啟動時關閉導航控制器- 第二種選擇

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

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

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

謝謝

這沒有回答如何使情節提要工作的問題。 這仍然是一個謎。 但是,通過執行以下操作,我能夠解決更改布局的奇怪行為。

我從情節提要中刪除了所有圖形,並將所有內容放入代碼中。 例如,我定義了一個容器視圖...

// 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的頁面之間滑動時,這將所有內容保持在原位

我遇到了同樣的問題,並找到了解決方案。 你只需要禁用automaticallyAdjustsScrollViewInsetsviewDidLoad 這是我的代碼:

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)
    }
}

歸功於這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM