首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift: UIPageViewController大小

swift: UIPageViewController大小
EN

Stack Overflow用户
提问于 2018-07-22 23:58:16
回答 2查看 1.7K关注 0票数 0

我有脊椎中间位置的UIPageViewController。现在我的两个页面占据了整个屏幕。但我想改变我的翻转页面的大小,我可以在控制器的其他部分创建按钮。该怎么做呢?

代码:

代码语言:javascript
复制
import UIKit

class PageViewController: UIViewController {

    @IBOutlet weak var PageControl: UIPageControl!

    var pageViewController: UIPageViewController?
    var images = ["book1page1.png","book1","book1","book1page2.png","book1page1.png","book1page2.png"]
    var pendingIndex: Int?

    override func viewDidLoad() {
        super.viewDidLoad()

        createPageViewController()
        setupPageControll()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func createPageViewController() {
        // Instantiate the PageViewController
        let pageController = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController
        pageController.dataSource = self
        pageController.delegate = self

        if images.count > 0{
            let firstController = getContentViewController(withIndex: 0)!
            let contentControllers = [firstController]

            pageController.setViewControllers(contentControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)

        }

        pageViewController = pageController

        self.addChildViewController(pageViewController!)

        //self.view.addSubview(pageViewController!.view)
        self.view.insertSubview(pageViewController!.view, at: 0)
        pageViewController!.didMove(toParentViewController: self)

    }

    //Setup Pagination Icons and count
    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return images.count
    }

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

    func setupPageControll(){
        let apperance = UIPageControl.appearance()
        apperance.pageIndicatorTintColor = UIColor.gray
        apperance.currentPageIndicatorTintColor = UIColor.white
        apperance.backgroundColor = UIColor.clear
    }

    func currentControllerIndex() -> Int{
        let pageItemController = self.currentConroller()

        if let controller = pageItemController as? ContentViewController {
            return controller.itemIndex
        }
        return -1
    }

    ///////////////////////////////////////////////

    func currentConroller() -> UIViewController?{
        if (self.pageViewController?.viewControllers?.count)! > 0{
            return self.pageViewController?.viewControllers![0]
        }

        return nil
    }

    func getContentViewController(withIndex index: Int) -> ContentViewController? {
        if index < images.count{
            let contentVC = self.storyboard?.instantiateViewController(withIdentifier: "ContentViewController") as! ContentViewController
            contentVC.itemIndex = index
            contentVC.imageName = images[index]

            return contentVC
        }

        return nil
    }

}

extension PageViewController: UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
        pendingIndex = (pendingViewControllers.first as! ContentViewController).itemIndex
    }

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
        if completed {
            let currentIndex = pendingIndex
            if let index = currentIndex {
                self.PageControl.currentPage = index
            }

        }
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let contentVC = viewController as! ContentViewController
        if contentVC.itemIndex > 0 {
            return getContentViewController(withIndex: contentVC.itemIndex - 1)
        }

        return nil
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let contentVC = viewController as! ContentViewController
        if contentVC.itemIndex + 1 < images.count {
            return getContentViewController(withIndex: contentVC.itemIndex + 1)
        }

        return nil
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-23 12:41:36

这里你已经实例化了UIPageViewController (id:"PageViewController")并在UIViewController中添加了子视图,所以如果你想创建UIButton,你可以创建它,但是如果它想在这个UIPageViewController前面可见,你可以把self.view.insertSubview(pageViewController!.view, at: 0)放到你的UIViewController上,把这个子视图放在索引0 (意思是在每个子视图后面)

下面我给出了代码: Add Subview at index 0和Make Size of the PageViewController using pageController.view.frame = CGRect(x: 50, y: 50, width: self.view.frame.width - (5.0 * 20.0), height: self.view.frame.height - (2.0 * 50.0))还在UIPageController底部添加了两个按钮"Next“和”Previous“

检查吹气代码:

代码语言:javascript
复制
func createPageViewController() {
        let pageController = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController

        pageController.isDoubleSided = true
        pageController.dataSource = self
        pageController.delegate = self

        if images.count > 1{
            let firstController = getContentViewController(withIndex: 0)!
            let secondController = getContentViewController(withIndex: 1)!
            let contentControllers = [firstController,secondController]
            pageController.setViewControllers(contentControllers, direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)

        }

        pageViewController = pageController
        self.addChildViewController(pageViewController!)
        self.view.insertSubview(pageViewController!.view, at: 0)

        pageController.view.frame = CGRect(x: 50, y: 50, width: self.view.frame.width - (5.0 * 20.0), height: self.view.frame.height - (2.0 * 50.0))
        pageController.view.layer.borderColor = UIColor.lightGray.cgColor
        pageController.view.layer.borderWidth = 1.0
        pageViewController!.didMove(toParentViewController: self)

        //Next Page Button
        let nextButton = UIButton()
        nextButton.frame = CGRect(x: pageController.view.frame.maxX - 75, y: pageController.view.frame.maxY + 5, width: 75, height: 50)
        nextButton.backgroundColor = UIColor.blue
        nextButton.setTitle("Next", for: .normal)
        nextButton.addTarget(self, action: #selector(buttonActionNext), for: .touchUpInside)
        self.view.addSubview(nextButton)

        //Previous Page Button
        let previousButton = UIButton()
        previousButton.frame = CGRect(x: pageController.view.frame.minX, y: pageController.view.frame.maxY + 5, width: 75, height: 50)
        previousButton.backgroundColor = UIColor.blue
        previousButton.setTitle("Previous", for: .normal)
        previousButton.addTarget(self, action: #selector(buttonActionPrevious), for: .touchUpInside)
        self.view.addSubview(previousButton)
    }

    @objc func buttonActionNext(sender: UIButton!) {
        print("Next page")
    }

    @objc func buttonActionPrevious(sender: UIButton!) {
        print("Previous Page")
    }
票数 2
EN

Stack Overflow用户

发布于 2018-07-23 00:11:23

您需要更改框架

代码语言:javascript
复制
 pageViewController!.view.frame = ///
 self.view.insertSubview(pageViewController!.view, at: 0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51466841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档