ios - 根据PageviewController调整containerView的高度

标签 ios swift

我在根据 pageViewController 的高度调整 ContainerView 高度时遇到了一些问题。

所以在这个例子中我有两个页面:“黄页”、“紫页

黄页 = 120px 高度

紫色页面 = 250px 高度

我想做的就是在滚动到 containerView 上嵌入的 pageViewController 时自动调整高度。

希望对您有所帮助,谢谢!

这是图片。 Storyboard Image

这是我的 PageViewController 代码。

import UIKit    

class PageViewController: UIPageViewController,UIPageViewControllerDataSource, UIPageViewControllerDelegate {


    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let currentIndex = pages.index(of: viewController)!
        let previousIndex = abs((currentIndex - 1) % pages.count)
        return pages[previousIndex]



    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let currentIndex = pages.index(of: viewController)!
        let nextIndex = abs((currentIndex + 1) % pages.count)
        return pages[nextIndex]
    }

    var pages = [UIViewController]()
    override func viewDidLoad() {
        super.viewDidLoad()    

        self.delegate = self
        self.dataSource = self

        let page1: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "page1");
        let page2: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "page2");
        pages.append(page1)
        pages.append(page2)
        setViewControllers([page1], direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil)


    }

    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
        return pages.count
    }

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
        return 0
    }    

    override func viewDidLayoutSubviews() {


    }    



}

最佳答案

你可以 Hook 容器的高度并像这样从分页器控制它

@IBOutlet weak var conH: NSLayoutConstraint!  

//

func callMe(value:CGFloat) {

    conH.constant = value

    self.view.layoutIfNeeded()
}

//

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

    let vc = UIApplication.shared.keyWindow?.rootViewController as! ViewController

    let currentIndex = pages.index(of: previousViewControllers.first!)!

    let nextIndex = abs((currentIndex + 1) % pages.count)

    vc.callMe(value:nextIndex == 0 ? 100 : 200)

}

//

enter image description here

关于ios - 根据PageviewController调整containerView的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51541262/

相关文章:

swift - 如何在 MacOS 上使用 Swift 获取鼠标点击坐标?

ios - 如何在 swift 3 的 tableview 单元格内单击更改按钮标题

ios - 图 2 UIImage 与不同的 UILabel 合并

ios - NSTimer Press "Start"Again then Cannot "Stop"

ios - 调用 removeFromSuperView() 后 UITableView 仍然存在

ios - Swift:无法解析 JSON 数据

arrays - Swift Loops 控制台的顺序不正确

ios - 如何在 iOS 中实现用户暂停功能

iOS, subview 大小无故改变

ios - 供应配置文件状态为待定