繁体   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