【问题标题】:UIPageControl not visible in iOS 14UIPageControl 在 iOS 14 中不可见
【发布时间】:2021-01-09 01:00:30
【问题描述】:

我有一个 UIPageControl,在过去 6 个月里在我的生产应用程序中运行良好。但是,在将我的所有测试设备更新到 iOS 14 并将 Xcode 更新到 v12 之后,我在 tableView 单元格中的 UIPageControl 不再可见。

我的代码中没有任何更改,这只是由于软件更新而自发发生的。我了解 Apple 已更改 UITableView 的视图层次结构并修改了页面控件。有谁知道为什么这个页面控件定位正确但仍然不可见?

Page control is in view hierarchy yet it is not visible

【问题讨论】:

    标签: ios swift xcode uikit ios14


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        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())"
                }
            }
        }
        

        【讨论】:

          【解决方案4】:

          在尝试了很多之后,对我来说唯一有用的就是通过添加约束来增加 UIPageControl 的宽度。对我来说效果很好。

          iOS14 的 pagecontrol 中还添加了一些新功能。你可以参考这个链接:https://medium.com/better-programming/take-a-look-at-ios-14s-new-uipagecontrol-3207a10212b9

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

              试试下面的一件事来解决:

              1. 将宽度和高度增加两倍或三倍。
              2. 向页面视图控制器添加约束。
              3. 在 Storyboard 或 XIB 中添加页面控件。比上面的 2 点要容易得多。

              【讨论】:

                【解决方案7】:

                iOS 14 无法设置点边框,因为 UIPageControl 子视图不是页面点。 您可以更改情节提要或 xib 上的点颜色,但不能更改点边框。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2017-05-06
                  • 2012-11-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-10-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多