我有一个 UIPageControl,在过去 6 个月里在我的生产应用程序中运行良好。但是,在将我的所有测试设备更新到 iOS 14 并将 Xcode 更新到 v12 后,我在 tableView 单元格中的 UIPageControl 不再可见。
我没有更改任何代码,这只是由于软件更新而自发发生的。据我所知,Apple 更改了 UITableView 的视图层次结构,并且还修改了页面控件。有谁知道为什么这个页面控件定位正确但仍然不可见?
如果 UIPageControl 在 iOS 14 中不可见,则只需添加宽度约束并分配关系“大于或等于”或增加 UIPageControl 的宽度。
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())"
}
}
}
我有同样的问题,当UIPageControl的宽度很短时,例如80pt,我在iOS 14或更高版本中设置了
pageControl.backgroundStyle = .minimal
。它对我有用。
经过多次尝试,唯一对我有用的就是通过添加 UIPageControl 的约束来增加它的宽度。对我来说效果很好。
ios14 的 pagecontrol 中还添加了一些新功能。您可以参考此链接:https://medium.com/better-programming/take-a-look-at-ios-14s-new-uipagecontrol-3207a10212b9
我自己最近也被这个问题困扰,在花了很多时间并尝试不同的方法之后,我可以通过简单地用新的 UIPageController 替换 Storyboard 中当前的 UIPageController 来使其工作。
尝试以下其中一项来解决:
pageControl.backgroundStyle = .minimal
对我有用。
iOS 14 无法设置点边框,因为 UIPageControl 子视图不是页面点。 您可以更改故事板或 xib 上的点颜色,但无法更改点边框。