iOS 14 PickerView 截断文本

Mat*_*ter 5 uipickerview ios swift

我有一个选择器视图,它不能像 iOS 14 那样正确显示文本。有谁知道如何解决这个问题?似乎有一个覆盖文本的子视图?

U完全切断

是因为我使用的是自定义标签吗?

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let pickerLabel = UILabel()
        let titleData = pickerDataSource[row]
        
        pickerView.subviews[1].backgroundColor = .clear
        pickerView.subviews[0].backgroundColor = .clear
        
        let myTitle = NSAttributedString(string: titleData, attributes: [NSAttributedString.Key.font:UIFont.systemFont(ofSize: 18),NSAttributedString.Key.foregroundColor:UIColor.black])
        pickerLabel.attributedText = myTitle
        return pickerLabel
    }
Run Code Online (Sandbox Code Playgroud)

小智 5

只需在标签上添加 margin-left 即可。

修复后

原始代码:

extension UILabel {
    func setMargins(margin: CGFloat = 10, _ leftMarginOnly: Bool = true) {
            if let textString = self.text {
                let paragraphStyle = NSMutableParagraphStyle()
                paragraphStyle.firstLineHeadIndent = margin
                paragraphStyle.headIndent = margin
                if !leftMarginOnly {
                    paragraphStyle.tailIndent = -margin
                }
                let attributedString = NSMutableAttributedString(string: textString)
                attributedString.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedString.length))
                attributedText = attributedString
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

  • 方法名称应清楚地表明这是一个错误修复:fixBugMargins。几周后,当您阅读使用此扩展的代码时,您会问自己这是 UIKit 方法还是自定义方法。其次,此方法将出现在所有 UILabel 中,但该错误出现在 UIDatePicker 中的 UILabel 上。两种可能性:该方法将被移动到 UIPickerView 或自定义类 UIKitBugFixes (3认同)