【问题标题】:Customise Position of UIPageControl自定义 UIPageControl 的位置
【发布时间】:2014-07-24 12:12:50
【问题描述】:

我正在使用来自 github 的项目作为参考。

项目网址:

https://github.com/lephuocdai/iOSsample/tree/master/PageViewDemo

在这个项目中,我想在左上角显示 UIPageControl。

我尝试使用 CGRectMake() 将 pageControl 的 rect 属性设置为某个值;但它始终显示在底部中心

【问题讨论】:

    标签: ios objective-c swift uipagecontrol


    【解决方案1】:

    这是一种非常简洁且 100% 有效的方法来更改 pageControl 的位置

    extension UIPageViewController {
      override open func viewDidLayoutSubviews() {
          super.viewDidLayoutSubviews()
    
          for subV in self.view.subviews {
              if type(of: subV).description() == "UIPageControl" {
                  let pos = CGPoint(x: newX, y: newY)
                  subV.frame = CGRect(origin: pos, size: subV.frame.size)
              }
          }
      }
    }
    

    【讨论】:

      【解决方案2】:

      该项目使用 UIPageViewController 来处理内容的显示和移动。 您可以向该对象提供数据,以便它按您所说的那样显示 UIPageControl。 但是除了一些颜色样式之外,您无法控制该项目的显示。 如果你想定位它,你需要实现你自己的 UIPageControl 实例并手动处理它的内容、位置和变化。

      【讨论】:

      • 自己的 UIPageControl 实例,你能给出一些想法吗,或者我需要实现全新的;我已将此演示转换为 swift
      • 如果你想在这个项目中使用页面控件并移动它的框架,禁用自动生成的 UIPageViewController,然后建立你自己的,将它添加到视图控制器视图并提供它启动时和每次检测到 UIPageViewController 中的滑动时计数和索引值
      【解决方案3】:

      覆盖pageviewcontroller的viewDidLayoutSubviews()并使用这个

      override func viewDidLayoutSubviews() {
          super.viewDidLayoutSubviews()
      
          // get pageControl and scroll view from view's subviews
          let pageControl = view.subviews.filter{ $0 is UIPageControl }.first! as! UIPageControl
          let scrollView = view.subviews.filter{ $0 is UIScrollView }.first! as! UIScrollView
          // remove all constraint from view that are tied to pagecontrol
          let const = view.constraints.filter { $0.firstItem as? NSObject == pageControl || $0.secondItem as? NSObject == pageControl }
          view.removeConstraints(const)
      
          // customize pagecontroll
          pageControl.translatesAutoresizingMaskIntoConstraints = false
          pageControl.addConstraint(pageControl.heightAnchor.constraintEqualToConstant(35))
          pageControl.backgroundColor = view.backgroundColor
      
          // create constraints for pagecontrol
          let leading = pageControl.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor)
          let trailing = pageControl.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor)
          let bottom = pageControl.bottomAnchor.constraintEqualToAnchor(scrollView.topAnchor, constant:8) // add to scrollview not view
      
          // pagecontrol constraint to view
          view.addConstraints([leading, trailing, bottom])
          view.bounds.origin.y -= pageControl.bounds.maxY
      }
      

      【讨论】:

        【解决方案4】:

        您的页面控件是否包含在其他视图中,如果是,那么您可能设置了错误的坐标,请尝试将您的页面 control.frame 的日志放在其中以了解它的位置

        【讨论】:

          【解决方案5】:

          如果使用故事板,请使用右下角的菜单放置一个 UIPageControl 对象并设置约束。

          如果使用框架,只需以编程方式添加:

          var pageControl = UIPageControl()
          pageControl.frame = CGRectMake(0,0,0,0) <- These are the coordinates.
          self.view.addSubView(pageControl)
          

          【讨论】:

            【解决方案6】:

            如果你为 UIPageControl 设置了框架,它就不起作用。 除此之外,您可以设置转换。

            [_pageControl setTransform:CGAffineTransformMakeTranslation(100, 0.0)];
            

            享受编码

            【讨论】:

              猜你喜欢
              • 2016-04-21
              • 1970-01-01
              • 1970-01-01
              • 2015-04-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-10
              • 1970-01-01
              相关资源
              最近更新 更多