Как я могу скрыть (или перекрасить) выделение выбора по умолчанию в Uipickerview, который я внедряю в Swiftui?IOS

Программируем под IOS
Ответить
Anonymous
 Как я могу скрыть (или перекрасить) выделение выбора по умолчанию в Uipickerview, который я внедряю в Swiftui?

Сообщение Anonymous »

Что я пытаюсь сделать
Я обхватываю пользовательскую uikit uipickerview в swiftui, потому что мне нужно: < /p>
Пользовательская высота строки (56 pt) < /p>
Swiftui Data Binding < /p>
Все работает, кроме того, что я все еще вижу системную дискретию. Я хотел бы полностью удалить его или изменить его цвет, чтобы вид был только мой собственный округлый прямоугольник. < /P>
// ------------------------- SwiftUI wrapper -------------------------
struct WheelPickerDemoUIKit: View {
@State private var selected: DefaultTool = .basic // enum cases below

var body: some View {
VStack(spacing: 30) {
DefaultToolPickerRepresentable(selection: $selected,
rowHeight: 56)
.frame(height: UIScreen.main.bounds.height * 0.7)

Text("Selected → \(selected.rawValue)")
}
.padding()
}
}

// ------------------------- UIKit picker view -------------------------
final class DefaultToolPickerView: UIView, UIPickerViewDataSource, UIPickerViewDelegate {

let picker = UIPickerView()
private let rowHeight: CGFloat

var selectedTool: DefaultTool {
DefaultTool.allCases[picker.selectedRow(inComponent: 0)]
}
var onSelection: ((DefaultTool) -> Void)?

init(rowHeight: CGFloat = 56) {
self.rowHeight = rowHeight
super.init(frame: .zero)
commonInit()
}
required init?(coder: NSCoder) { fatalError() }

private func commonInit() {
picker.dataSource = self
picker.delegate = self
picker.backgroundColor = .clear
picker.translatesAutoresizingMaskIntoConstraints = false
addSubview(picker)

NSLayoutConstraint.activate([
picker.leadingAnchor.constraint(equalTo: leadingAnchor),
picker.trailingAnchor.constraint(equalTo: trailingAnchor),
picker.topAnchor.constraint(equalTo: topAnchor),
picker.bottomAnchor.constraint(equalTo: bottomAnchor)
])
}

// MARK: UIPickerViewDataSource / Delegate
func numberOfComponents(in pickerView: UIPickerView) -> Int { 1 }

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent _: Int) -> Int {
DefaultTool.allCases.count
}

func pickerView(_ pickerView: UIPickerView,
viewForRow row: Int,
forComponent _: Int,
reusing view: UIView?) -> UIView {
let label = (view as? UILabel) ?? UILabel()
label.text = DefaultTool.allCases[row].rawValue
label.font = .systemFont(ofSize: 24, weight: .medium)
label.textAlignment = .center
label.textColor = .black
return label
}

func pickerView(_: UIPickerView, rowHeightForComponent _: Int) -> CGFloat {
rowHeight
}

func pickerView(_ pickerView: UIPickerView, didSelectRow _: Int, inComponent _: Int) {
pickerView.reloadAllComponents()
onSelection?(selectedTool)
}
}

// ------------------------- SwiftUI UIKit bridge -------------------------
struct DefaultToolPickerRepresentable: UIViewRepresentable {
@Binding var selection: DefaultTool
var rowHeight: CGFloat = 56

func makeUIView(context: Context) -> DefaultToolPickerView {
let view = DefaultToolPickerView(rowHeight: rowHeight)
view.onSelection = { selection = $0 }
return view
}

func updateUIView(_ uiView: DefaultToolPickerView, context: Context) {
if selection != uiView.selectedTool,
let idx = DefaultTool.allCases.firstIndex(of: selection) {
uiView.picker.selectRow(idx, inComponent: 0, animated: true)
uiView.picker.reloadAllComponents()
}
}
}

// ------------------------- Demo enum -------------------------
enum DefaultTool: String, CaseIterable, Identifiable {
var id: Self { self }
case basic = "Basic Calc", emi = "EMI Calc", sip = "SIP Calc"
case percent = "Percentage Calc", gst = "GST Calc", bmi = "BMI Calc"
}

< /code>
Что я уже пробовал < /p>
picker.subviews
.filter { $0.frame.height < 2 }
.forEach { $0.isHidden = true }
< /code>
Попытка KVC < /p>
picker.setValue(UIColor.clear, forKey: "selectionIndicator")
< /code>
Вопрос
Есть ли какой -либо поддерживаемый способ скрыть или перекрасить индикатор по умолчанию
в Uipickerview, когда я внедряю его в Swiftui? Или единственный сейф
подход для наложения моего собственного представления и признания того, что серая полоса по -прежнему
рендерирован внизу?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... erview-tha
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»