自定义UIPageControl的位置

时间:2014-07-24 12:12:51

标签: ios objective-c swift uipagecontrol

我使用github中的项目作为参考。

项目网址:

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

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

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

6 个答案:

答案 0 :(得分:4)

这是一个非常简洁且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)
          }
      }
  }
}

答案 1 :(得分:3)

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

答案 2 :(得分: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
}

答案 3 :(得分:1)

是您的页面控件包含在其他视图中,如果是这样,那么您可能会设置错误的坐标,尝试将页面控件的日志设置为框架以便知道它在哪里

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

如果您为UIPageControl设置框架,则它不起作用。 除此之外,您可以设置变换。

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

享受编码