Search code examples
swifttvosuipagecontrol

UIPageControl has background on tvOS


In one of my games I am using a UICollectionView as the level select menu. I recently added a UIPageControl to it programatically.

     /// Page control
func setupPageControl() {
    pageControl.hidesForSinglePage = true
    pageControl.numberOfPages = DataSource.worlds
    pageControl.translatesAutoresizingMaskIntoConstraints = false
    pageControl.currentPageIndicatorTintColor = DataSource.pageControlColors[pageControl.currentPage]
    pageControl.pageIndicatorTintColor = UIColor.white.withAlphaComponent(0.8)
    pageControl.addTarget(self, action: #selector(didPressPageControl), for: .valueChanged)
    view.addSubview(pageControl)

    let leading = NSLayoutConstraint(item: pageControl, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0)
    let trailing = NSLayoutConstraint(item: pageControl, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0)

    let bottomConstant = Device.isPad ? view.frame.width / 9 : view.frame.width / 17
    let bottom = NSLayoutConstraint(item: pageControl, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: -bottomConstant)
    view.addConstraints([leading, trailing, bottom])
}

Everything is fine on iOS but on tvOS the PageController has a translucent background that stretches all across the screen.

enter image description here

How can I turn this off? I tried setting the pageControl background color but that does not seem to work.


Solution

  • As usual just when I post a question I find the answer a minute later.

    You can remove the background on tvOS by calling this

    #if os(tvOS)
       for subview in pageControl.subviews {
           let effectView = subview as? UIVisualEffectView
           effectView?.removeFromSuperview()
       }
    #endif
    

    Change background color for page control