Хорошо, когда вы поворачиваете UIPickerView
, применяя преобразование, когда вы указываете ширину компонента, вы на самом деле указываете rowHeight.
Не очень ясно, просматриваете ли вы представление, но если вы регистрируете размер кадра, то выпоймет.
Таким образом, вы должны установить pickerView:rowHeightForComponent
, чтобы сделать его достаточно широким
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 300 // you can calculate this based on your container view or window size
}
Кроме того, вы также можете использовать intrinsicContentSize
из UILabel
, чтобы определить правильный размерметку и обновите ее фрейм соответственно, чтобы убедиться, что метка также отображается правильно.
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 150, height: 30)
let label = UILabel()
label.frame = CGRect(x: 0, y: 0, width: 150, height: 30)
label.textAlignment = .center
label.font = UIFont(name:"verdana", size: 24.0)!
label.text = data[row]
let updatedLabelSize = label.intrinsicContentSize
dump(updatedLabelSize)
label.frame = CGRect(x: 0, y: 0, width: updatedLabelSize.width, height: 30)
view.frame = CGRect(x: 0, y: 0, width: updatedLabelSize.width, height: 30)
view.addSubview(label)
view.transform = CGAffineTransform(rotationAngle: 90 * (.pi / 180))
return view
}
Вот как на самом деле выглядит UIPickerView при его преобразовании. Красная рамка после трансформации, вещи, которые вы видите Синяя подсветка - это реальная рамка