【问题标题】:Why need to set diffrent constant for iOS 13 & iOS 14 in pageControl为什么需要在 pageControl 中为 iOS 13 和 iOS 14 设置不同的常量
【发布时间】:2021-05-04 14:44:30
【问题描述】:

我在我的应用程序中使用UIPageControl 并设置约束,例如 -

var trailingAnchor:CGFloat = -16
        if #available(iOS 14, *) {
            trailingAnchor = 16
        }
 trailing = pageControl.trailingAnchor.constraint(equalTo: contentContainerView.trailingAnchor, constant: trailingAnchor)

不幸的是,我必须根据 iOS 版本编写 trailingAnchor:CGFloat,否则 pagecontrol 会超出 iOS 13 的视图 & According to this 来自 iOS 14 我们必须对 pageControl 进行约束 那么我可以摆脱var trailingAnchor吗?

【问题讨论】:

  • 这似乎没有意义......您是否还设置了Leading或Width约束?您能否展示您的全套约束,以及您在 iOS 13 和 14 之间获得的差异的图片(使用相同的尾随值,而不是您在此处显示的调整)?
  • @DonMag 如果我使用的是 Trailing 、 Top 和 fix Width 但观察到的奇怪行为如上所述。

标签: ios swift uipagecontrol


【解决方案1】:

UIPageControl 在外观和功能上存在差异,但就布局而言,唯一的差异应该是固有高度。

这是一个简单的例子...添加一个“容器”UIView,并添加一个页面控件作为该容器的子视图:

class ViewController: UIViewController {
    
    let contentContainerView = UIView()
    let pageControl = UIPageControl()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        contentContainerView.translatesAutoresizingMaskIntoConstraints = false
        pageControl.translatesAutoresizingMaskIntoConstraints = false
        
        contentContainerView.addSubview(pageControl)
        view.addSubview(contentContainerView)
        
        // respect safe area
        let g = view.safeAreaLayoutGuide
        
        NSLayoutConstraint.activate([
            
            contentContainerView.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0),
            contentContainerView.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 20.0),
            contentContainerView.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: -20.0),
            
            contentContainerView.heightAnchor.constraint(equalToConstant: 120.0),
            
            pageControl.leadingAnchor.constraint(equalTo: contentContainerView.leadingAnchor, constant: 16.0),
            pageControl.trailingAnchor.constraint(equalTo: contentContainerView.trailingAnchor, constant: -16.0),
            pageControl.bottomAnchor.constraint(equalTo: contentContainerView.bottomAnchor, constant: -8.0),

        ])

        contentContainerView.backgroundColor = .systemYellow
        pageControl.backgroundColor = .systemTeal
        
        pageControl.numberOfPages = 7
    }
    
}

以下是 iOS 14(左侧)和 iOS 13(右侧)之间的外观:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2021-08-14
    • 2019-11-16
    • 2013-07-15
    • 1970-01-01
    • 2015-11-14
    • 2022-01-17
    相关资源
    最近更新 更多