为啥需要在 pageControl 中为 iOS 13 和 iOS 14 设置不同的常量

Posted

技术标签:

【中文标题】为啥需要在 pageControl 中为 iOS 13 和 iOS 14 设置不同的常量【英文标题】: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 如果我使用的是 TrailingTopfix Width 但观察到的奇怪行为如上所述。 【参考方案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(右侧)之间的外观:

【讨论】:

以上是关于为啥需要在 pageControl 中为 iOS 13 和 iOS 14 设置不同的常量的主要内容,如果未能解决你的问题,请参考以下文章

为啥 iframe 仅在 iOS 中为空白?

为啥 Xcode“基于页面的应用程序”项目模板有一个 PageController?

IOS视差和PageControll

xamarin.ios 使用仅图像代码实现 PageController

为啥 Google Maps Cordova ionic angular 仅在 Android 中工作而在 IOS 中为空白?

PageControl 将标记放置在我想要的位置 ios 9