UIPageControl在iOS 14中不可见
我有一个UIPageControl,在过去6个月里,它在我的生产应用程序中运行良好。但是,在将所有测试设备更新为iOS 14并将Xcode更新为v12之后,我在tableView单元格中的UIPageControl不再可见 我的代码中没有任何更改,这只是由于软件更新而自发发生的。据我所知,苹果改变了UITableView的视图层次结构,并修改了页面控件。有人知道为什么这个页面控件位置正确,但仍然不可见吗UIPageControl在iOS 14中不可见,ios,swift,xcode,uikit,ios14,Ios,Swift,Xcode,Uikit,Ios14,我有一个UIPageControl,在过去6个月里,它在我的生产应用程序中运行良好。但是,在将所有测试设备更新为iOS 14并将Xcode更新为v12之后,我在tableView单元格中的UIPageControl不再可见 我的代码中没有任何更改,这只是由于软件更新而自发发生的。据我所知,苹果改变了UITableView的视图层次结构,并修改了页面控件。有人知道为什么这个页面控件位置正确,但仍然不可见吗 我自己最近也被这个问题困扰着,在花了很多时间尝试不同的方法后,我可以通过简单地用新的UIPa
我自己最近也被这个问题困扰着,在花了很多时间尝试不同的方法后,我可以通过简单地用新的UIPageController替换故事板中当前的UIPageController来让它工作。在尝试了很多之后,对我来说唯一有效的方法就是通过添加常量来增加UIPageControl的宽度。这对我来说很好
ios14的pagecontrol中还添加了一些新功能。您可以参考此链接:iOS 14无法设置点边框,因为UIPageControl子视图不是页面点。
您可以更改情节串连板或xib上的点颜色,但不能更改点边框。如果UIPageControl在iOS 14中不可见,则只需添加宽度约束并指定关系“大于或等于”,或增加UIPageControl的宽度。尝试以下一种方法进行整理:
我也有同样的问题,当UIPageControl的宽度很短时,例如80pt,我在iOS 14或更高版本中设置了
pageControl.backgroundStyle=.minimal
。它适合我。UIPageControl在iOS 14中的工作方式略有不同。如果宽度太小,它不会显示任何内容,这可能会令人惊讶
很好的说明,谢谢
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())"
}
}
}