iOS - 相同小宽度的 UIView 不会在较小的设备上布局

Posted

技术标签:

【中文标题】iOS - 相同小宽度的 UIView 不会在较小的设备上布局【英文标题】:iOS - UIView of same small width does not layout on smaller devices 【发布时间】:2020-05-07 06:37:14 【问题描述】:

我有一个定义如下的 UIView -

private let verticalSeparatorLine: UIView = 
   let view = UIView()
   view.translatesAutoresizingMaskIntoConstraints = false
   view.alpha = 0.94
   view.backgroundColor = .lightGray
   return view
()

这就是我将它添加到视图控制器视图的方式。

override func viewDidLoad() 
    super.viewDidLoad()
    addTestView()


private func addTestView() 

    view.addSubview(verticalSeparatorLine)

    NSLayoutConstraint.activate([
        verticalSeparatorLine.centerX.constraint(to: view.centerX),
        verticalSeparatorLine.bottomAnchor.constraint(to: view.bottomAnchor),
        verticalSeparatorLine.widthAnchor.constraint(0.3),
        verticalSeparatorLine.heightAnchor.constraint(70)
    ])

如果我将此verticalSeparatorLine 添加到iPhone X 等较大设备中的ViewController 视图中,则视图的布局与预期一致。在较小的设备中,视图的宽度为零。如果我将宽度增加到 2,它会出现在两个设备上。

我错过了什么吗?

更新: 如果我替换为leadingAnchorverticalSeparatorLine 是可见的,宽度为 0.5。

verticalSeparatorLine.leadingAnchor.constraint(to: view.leadingAnchor, constant: 10),

【问题讨论】:

我之前遇到过这个问题,经过搜索和尝试了很多方法,最后我的解决方案是在这里使用图像^_^! 【参考方案1】:

这取决于设备的分辨率,如果 UIScreen.main.scale == 2 意味着你设置宽度 1 等于 2 像素的宽度,所以 0.3(0.6pixel) 不能显示,但在 scale3 设备中,0.33 正好等于到 1 个像素。

【讨论】:

以上是关于iOS - 相同小宽度的 UIView 不会在较小的设备上布局的主要内容,如果未能解决你的问题,请参考以下文章

如何修复在较小屏幕中被截断的选择器对话框?

iOS:根据 View 位置动态改变 UILabel Alignment

Bootstrap 面板在较小尺寸上不需要的左右边距

如何阻止 jQuery 函数在较小的屏幕上执行?

三星/IE 的 CSS 导航大小问题

为啥在大型数据库上查找具有特定 ID 的对象的 Django 查询比在较小数据库上要慢?