gpt4 book ai didi

swift - UIPickerView 仅在 iPad 模拟器上被切入中间

转载 作者:搜寻专家 更新时间:2023-10-31 22:56:09 24 4
gpt4 key购买 nike

我有一个高度 = 1.0 的 UIView,以及一个使用自动布局附加在其上的选择器 View (它显示在 View 下方)。

我的选择器 View 的宽度应该等于行分隔符(UIView)。

在 iPhone 上效果很好,但在 iPad 上,选择器 View 在中间被切开。我在“Debug view hierarchy”中测试,看到它实际上在 View 的宽度上,但仍然在中间切开(见添加的截图)。

然后我想到可能是委托(delegate)函数的问题,所以我添加了这些实现:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let rowInfo = getRowText(for: pickerView, fromRow: row, andComponent: component)

let field = (view as? UITextField) ?? UITextField()
field.font = font16
field.textAlignment = .left
field.textColor = .black
field.text = rowInfo.text
return field
}
func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
return self.aSeperator.frame.width
}

截图: On simulator

on debug view hierarchy

enter image description here

这是我为该选择器 View 实现的自动布局约束 enter image description here

最佳答案

发现问题了!问题是我在 viewDidLoadUIPickerView 上调用这个函数:

    clientPickerView.roundCorners([.bottomLeft, .bottomRight], radius: 4.0)
clientSitePicker.roundCorners([.bottomLeft, .bottomRight], radius: 4.0)

此函数更改选择器 View 的蒙版,为其添加圆角(如上图所示):

func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}

解决方案是将此调用移至 viewDidLayoutSubviews

关于swift - UIPickerView 仅在 iPad 模拟器上被切入中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46472470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com