【问题标题】:Increase the size of the indicator in UIPageViewController's UIPageControl在 UIPageViewController 的 UIPageControl 中增加指示器的大小
【发布时间】:2017-02-24 07:09:15
【问题描述】:

是否可以增加UIPageViewController中指标的大小?

我有这个:

而我的要求是这样的:

【问题讨论】:

    标签: swift uipageviewcontroller uipagecontrol


    【解决方案1】:

    缩放页面控件会缩放点,但也会缩放它们之间的间距。

    pageControl.transform = CGAffineTransform(scaleX: 2, y: 2)
    

    如果要保持点之间的间距相同,则需要单独转换点:

    pageControl.subviews.forEach {
        $0.transform = CGAffineTransform(scaleX: 2, y: 2)
    }
    

    但是,如果您在viewDidLoad 中执行此操作,则在视图出现时转换已重置,因此您应该在viewDidLayoutSubviews 中执行此操作...

    override func viewDidLayoutSubviews() {
        pageControl.subviews.forEach {
            $0.transform = CGAffineTransform(scaleX: 2, y: 2)
        }
    }
    

    【讨论】:

    • 这是一个很好的答案,但是我怎样才能在 UIPageViewController 中获得 UIPageControl 的引用。就像我打印 UIPageViewController 的子视图一样,我只会得到 ScrollView!还是需要在storyboard中拖一个UIPageControl?
    • 你解决过这个问题吗?我对如何引用 pageControl 有同样的困惑。我是否在 UIPageViewController 中以某种方式执行此操作?我想要的只是更大的点,并且缩放它们之间的距离也可以。
    • 请注意,虽然这是一个聪明的答案,但 Apple 不支持您进入框架控件并操纵其私有视图层次结构。这是脆弱的,今天有效的方法可能会改变未来版本的行为。
    • @DuncanC Apple 可能不支持它,但它仍然允许它。例如,当您自定义 NavigationBar 时也是如此。你只需要避免使用私有符号。
    • 在 C# 或 Xamarin.ios 中像这样使用 myPageControl.Transform = CGAffineTransform.MakeScale(2, 2);
    【解决方案2】:

    您可以使用UIPageControl 并像这样缩放它:

    @IBOutlet weak var pageControl: UIPageControl!
    
     override func viewDidLoad() {
        super.viewDidLoad()
        pageControl.transform = CGAffineTransform(scaleX: 2, y: 2); //set value here
    }
    

    这样做的问题是您的点之间的间距也会增加。如果您想对您的点进行准确的设计,您必须使用 3party 控件:https://www.cocoacontrols.com/

    【讨论】:

    • 我在问题中提到我正在使用 UIPageViewController。
    • @AnuragSharma 我知道,当我们想要对点进行更多控制时,UIPageControl 与 UIPageViewController 一起使用。这并非不兼容。没有办法只用 UIPageViewController 做你想做的事
    • 你说的很对,但是我们可以在“viewDidLayoutSubviews()”中获取“UIPageControl”的引用,并根据需要进行修改。我们可以改变点之间的空间看看@Ashley Mills 的回答
    【解决方案3】:

    为 swift 2.0 增加或减少 pageControl Indicator 的大小

    self.pageControl.transform = CGAffineTransformMakeScale(0.8, 0.8)
    

    self.pageControl.transform = CGAffineTransformMakeScale(1.3, 1.3)
    

    【讨论】:

    • 或反之亦然:1.3 是增加的。使用 CGAffineTransformMakeScale 让我对 Obj-C 更清楚。
    • 你要的是objective-c吗?
    • 不,谢谢。您的示例,而不是早期的示例,帮助我将解决方案转换为 Objective-C。 self.pageControl.transform = CGAffineTransformMakeScale(1.8, 1.8);
    【解决方案4】:

    Swift 4、4.2 和 5

    首先创建一个页面控件的outlet

    @IBOutlet weak var pageControl: UIPageControl!
    

    如果你想保持原来的间距。

    override func viewDidLayoutSubviews() {
            pageControl.transform = CGAffineTransform(scaleX: 2, y: 2)
    }
    

    如果你不想保持原来的间距。

    override func viewDidLayoutSubviews() {
            pageControl.subviews.forEach {
                $0.transform = CGAffineTransform(scaleX: 2, y: 2)
            }
    }
    

    【讨论】:

      【解决方案5】:

      首先,在 viewDidLoad() 内部创建一个 uiPageControl 对象,然后根据您的要求设置它的 y 位置,然后使用 CAAffiniteTransform 应用所需的比例,如下所示:

              var pageControl = UIPageControl()
              pageControl.pageIndicatorTintColor = UIColor.gray
              pageControl.currentPageIndicatorTintColor = UIColor.yellow
      
              pageControl.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) // set dot scale of pageControl
      
              pageControl.backgroundColor = UIColor.darkGray
              pageControl.numberOfPages = 3
              pageControl.center = self.view.center 
              self.view.addSubview(pageControl) // add pageControl to view
      
              pageControl.layer.position.y = self.view.frame.height - 100; // y position of the pageControl
      

      【讨论】:

        【解决方案6】:

        向页面控制器添加扩展

        extension UIPageControl {
            func customPageControl(dotWidth: CGFloat) {
                for (pageIndex, dotView) in self.subviews.enumerated() {
                    dotView.frame.size = CGSize.init(width: dotWidth, height: dotWidth)
                }
            }
        }
        

        【讨论】:

        • 这是设置框架而不是约束的问题。
        • 在 LayoutSubview 中或页面控制器发生变化时调用此方法,以便相应调整
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多