swift UIPageControl在iOS 14中不可见

u0njafvf  于 5个月前  发布在  Swift
关注(0)|答案(7)|浏览(59)

我有一个UIPageControl,在过去的6个月里,它在我的生产应用程序中工作得很好。然而,在将我所有的测试设备更新到iOS 14并将Xcode更新到v12之后,我在tableView单元格中的UIPageControl不再可见。
我在我的代码中没有改变任何东西,这只是由于软件更新而自发发生的。我知道Apple已经改变了可扩展视图的视图层次结构,并且还修改了页面控件。有人知道为什么这个页面控件被正确定位但仍然不可见吗?
Page control is in view hierarchy yet it is not visible

wz3gfoph

wz3gfoph1#

如果UIPageControl在iOS 14中不可见,则只需添加宽度约束并指定关系“大于或等于”或增加UIPageControl宽度。

mlmc2os5

mlmc2os52#

UIPageControl在iOS 14中的工作方式略有不同。如果宽度太小,它不会显示任何内容,这可能令人惊讶。
100d1x

的字符串

import UIKit

class ViewController: UIViewController {
    
    lazy var label: UILabel = UILabel()
    var widthConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()

        let pageControl = UIPageControl()
        pageControl.numberOfPages = 10
        pageControl.currentPage = 3
        pageControl.pageIndicatorTintColor = .red
        pageControl.currentPageIndicatorTintColor = .green
        pageControl.layer.borderWidth = 1
        pageControl.layer.borderColor = UIColor.purple.cgColor
        widthConstraint = pageControl.widthAnchor.constraint(equalToConstant: 100)
        widthConstraint.isActive = true
        
        let slider = UISlider()
        slider.minimumValue = 0
        slider.maximumValue = 300
        slider.value = 100
        slider.widthAnchor.constraint(equalToConstant: 200).isActive = true
        slider.addTarget(self, action: #selector(sliderValueDidChange(_:)), for: .valueChanged)
        
        let stackView = UIStackView(arrangedSubviews: [label, pageControl, slider])
        stackView.axis = .vertical
        stackView.alignment = .center
        stackView.spacing = 40
        
        view.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            stackView.widthAnchor.constraint(equalTo: view.widthAnchor)
        ])
        
        updateLabel()
    }

    @objc
    func sliderValueDidChange(_ sender: Any?) {
        guard let slider = sender as? UISlider else { return }
        widthConstraint.constant = CGFloat(slider.value)
        updateLabel()
    }
    
    func updateLabel() {
        if #available(iOS 14.0, *) {
            label.text = "iOS 14 PageControl width: \(widthConstraint.constant.rounded())"
        } else {
            label.text = "iOS 13 PageControl width: \(widthConstraint.constant.rounded())"
        }
    }
}

字符串

rjee0c15

rjee0c153#

我也有同样的问题,当UIPageControl的宽度很短时,例如80pt,我在iOS 14或更高版本中设置了pageControl.backgroundStyle = .minimal。它对我有效。

xv8emn3q

xv8emn3q4#

在尝试了很多之后,唯一对我有用的就是通过添加constarints来增加UIPageControl的宽度。
也有一些新的功能添加在页面控制为ios14.你可以参考这个链接:https://medium.com/better-programming/take-a-look-at-ios-14s-new-uipagecontrol-3207a10212b9

qmb5sa22

qmb5sa225#

我自己最近也被这个问题所困扰,在花了很多时间并尝试了不同的方法之后,我可以通过简单地用新的UIPageController替换Storyboard中当前的UIPageController来使它工作。

vecaoik1

vecaoik16#

试着从下面的一件事中整理出来:
1.增加宽度和高度的两倍或三倍。
1.向页面视图控制器添加约束。
1.在故事板或XIB中添加页面控制。这将比上面的2点简单得多。

lyfkaqu1

lyfkaqu17#

iOS 14无法设置点边框,因为UIPageControl子视图不是页面点。您可以在故事板或xib上更改点颜色,但不能更改点边框。

相关问题