Что я пытаюсь сделать
Я обхватываю пользовательскую 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
Как я могу скрыть (или перекрасить) выделение выбора по умолчанию в Uipickerview, который я внедряю в Swiftui? ⇐ IOS
Программируем под IOS
1752765238
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? Или единственный сейф
подход для наложения моего собственного представления и признания того, что серая полоса по -прежнему
рендерирован внизу?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79695363/how-do-i-hide-or-recolor-the-default-selection-highlight-in-a-uipickerview-tha[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия