[英]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的頁面之間滑動時,這將所有內容保持在原位
我遇到了同樣的問題,並找到了解決方案。 你只需要禁用automaticallyAdjustsScrollViewInsets
在viewDidLoad
。 這是我的代碼:
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.