SwiftUI:设置选择器行高

2023-12-06

对于大字体,a 中的线条Picker是重叠的。我该如何更改Picker's行高? (提示:.lineSpacing修饰符不会这样做。)

See Also

这个问题类似于Ejaaz,但他的问题至今尚未得到答复。

问题

picker view

The Code

以下可运行代码产生上述结果。我并不是真的想要不同大小的线条,我只是想要大字体能够正确适应。我试过插入Spacers,添加.frame这里和那里的修饰符,.lineSpacing, padding()...也许只是还没有找到正确的组合?

struct ContentView: View {
    @State private var selected = 0

    var body: some View {
        Picker(selection: self.$selected, label: Text("Letters")) {
            Text("A").font(.system(size: 30))
            Text("B").font(.system(size: 40))
            Text("C").font(.system(size: 50))
            Text("D").font(.system(size: 60))
            Text("E").font(.system(size: 70))
            Text("F").font(.system(size: 80))
        }
    }
}

enter image description here

你必须包裹UIPickerView in a UIViewRepresentable然后使用:

 func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat 

...更改行高。

Example

它只是展示了如何更改行高,您仍然需要为您的内容扩展它......

struct PickerView: UIViewRepresentable {
    var data: [[String]]
    @Binding var selections: Int

    // Assign custom coordinator for delegate functions.
    func makeCoordinator() -> PickerView.Coordinator {
        Coordinator(self)
    }

    // Creates the view object and configures its initial state.
    func makeUIView(context: UIViewRepresentableContext<PickerView>) -> UIPickerView {
        let picker = UIPickerView(frame: .zero)

        picker.dataSource = context.coordinator
        picker.delegate = context.coordinator

        return picker
    }

    // Updates the state of the specified view with new information from SwiftUI.
    func updateUIView(_ view: UIPickerView, context: UIViewRepresentableContext<PickerView>) {
        // for i in 0...(self.selections.count - 1) {
        //     view.selectRow(self.selections[i], inComponent: i, animated: false)
        // }
    }


    // Coordinator acting as the delegate in SwiftUI.
    class Coordinator: NSObject, UIPickerViewDataSource, UIPickerViewDelegate {
        var parent: PickerView

        //init(_:)
        init(_ pickerView: PickerView) {
            self.parent = pickerView
        }
        
        // Set your custom row height here!
        func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
            return 80
        }

        //numberOfComponents(in:)
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return self.parent.data.count
        }

        //pickerView(_:numberOfRowsInComponent:)
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return self.parent.data[component].count
        }

        //pickerView(_:titleForRow:forComponent:)
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return self.parent.data[component][row]
        }

        //pickerView(_:didSelectRow:inComponent:)
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            // self.parent.selections[component] = row
        }
    }
}

要在 SwiftUI 视图中使用它,只需将自定义PickerView()在你的身体里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI:设置选择器行高 的相关文章

随机推荐

  • 创建计算列并舍入

    我有 3 个numeric 18 2 我的表中的列 我想创建一个fourth column那是computed 我在 SSMS 中创建了计算列numeric 18 2 就像其他 3 列一样 当我运行SELECT针对我的新列 它计算得很好 但
  • 在 Nuxt 中设置输出文件夹的路径

    在 Windows 中工作 我可以使用 nuxt 项目生成静态站点 npx nuxt generate 我有兴趣为生成的静态文件设置输出文件夹 我正在通读https nuxtjs org api configuration generate
  • DBRefs(Mongo 文档引用)未立即获取

    我正在以最简单的方式使用 Mongo 与 Spring Data 结合使用 我有两个 第一类 实体 Documents A 和 B 其中 A 中有 B 的引用 DBRef 创建 A 和 B 时一切正常 但是 当读取对象 A 通过 Id 时
  • Javascript中是否有“0b”或类似的东西来表示二进制数

    我知道0x是 Javascript 中十六进制数字的前缀 例如 0xFF代表数字255 二进制数有类似的东西吗 我希望0b1111来表示数字15 但这对我不起作用 Update 较新版本的 JavaScript 特别是 ECMAScript
  • oracle中的条件选择语句

    我有两个表 分别称为订单和公共假期 如下所示 订单表 OrderId OrderDate 1 10 Mar 2017 2 12 Mar 2017 3 30 Mar 2017 公众假期表 HoliId HolidayDate 1 10 Mar
  • 如何设置 View.setVisibility(GONE) 动画

    我想做一个Animation当一个View将其可见性设置为GONE 不但没有消失 View应该 崩溃 我尝试过这个ScaleAnimation但随后View是折叠的 但布局只会在折叠之后 或之前 调整其空间大小Animation停止 或开始
  • 颜色不被子元素继承?

    我已尝试尽可能简化下面的 HTML 为什么CSS属性 color 01FFDD 被嵌套表的所有元素忽略 嵌套 CSS 使用 div 一般对我有用 但在这里不行 难道我做错了什么 div
  • 一系列承诺[重复]

    这个问题在这里已经有答案了 我正在写一篇文章 我必须从不同城市的 API 获取 json 数据并构建 DOM 到目前为止 我已经能够做到这两点了 唯一的问题是不同城市的API响应时间不同 因此 当我构建 DOM 时 它们的顺序与我调用函数的
  • 从itextsharp注释中弹出一个窗口来显示图像和文本

    我想在 C 项目中添加并弹出窗口 通过单击 itextsharp 注释来显示图像和文本 iTextSharp text pdf PdfAnnotation annot iTextSharp text pdf PdfAnnotation Cr
  • 永久隐藏Android状态栏

    我正在尝试隐藏 Android 4 4 设备上的系统状态栏 这是针对信息亭模式的 其中我的应用程序将是设备上运行的唯一应用程序 目前的目标设备是 2013 款 Nexus 7 该设备已获得 root 权限 并且我已经能够完全删除底部导航栏
  • 使用 ToLower() 进行切换会导致错误 CS0426 类型名称 '' 在类型 '' 中不存在

    为什么编译器仅在 switch 语句中为常量值调用方法时才会抱怨 为什么会出现错误The type name A does not exist in the type CS0426 类型中不存在类型名称 A ClassificationId
  • 非递归地检索二叉树节点的深度

    任何人都可以指出一种获取二叉树中节点深度的方法 不是平衡树 或 BST 不使用递归 最好使用 Java C C 节点表示为 class Node Node Left Node Right string Value int Depth 我的第
  • Camel-K 无法识别本地包

    我有一个使用自己的处理器的 RouteBuilder 类 当使用 Maven 在 Camel 中本地运行时 它运行良好 但是 当我尝试使用camel k时 它说找不到该包 有什么我需要做的吗 我的处理器 package com test p
  • 帕累托优化 - 非支配点

    我编写了一个算法 它返回一个与 nsga2 返回的列表类似的列表 mco 包的 nsga2 pdf 该算法本身无法识别一个点是否为非支配点 它返回的一些点是主导的 它只包含点及其值 而不包含 nsga2 返回的逻辑向量 我试图获得非支配点
  • 从对象(日期对象)解构函数

    如果我想破坏一个对象我会这样做 const obj a a fn gt some function const fn obj fn OR const a fn obj console log fn 这不适用于Date目的 未捕获的类型错误
  • Python 中的字典有单一的 repr 值吗?

    In this question 有人建议在字典上调用 repr 是将其存储在另一个字典中的好方法 这取决于 repr 是否相同 无论键如何排序 是这样吗 附言 最初问题的最优雅的解决方案实际上是使用 freezeset 不 键添加到字典的
  • ipython笔记本工具栏自定义

    我想在 ipython 笔记本上添加一个新的工具栏按钮 我得到了一个好的link提到了这一点 所以我创建一个新文件 ipython profile default static custom custom js 包含以下内容 IPython
  • PdfBox 编码符号货币欧元

    我使用 Apache PDFBox 库创建了一个 PDF 文档 我的问题是在页面上绘制字符串时对欧元货币符号进行编码 因为基本字体 Helvetica 不提供此字符 如何将输出 转换为符号 不幸的是 PDFBox 的字符串编码还远非完美 版
  • 用于 glmer 的用户定义链接函数,用于已知命运生存建模

    生态学中的常见情况是具有二元结果 0 死亡 1 生存 的生存模型 其中个体 在本例中考虑鸟类的个体筑巢尝试 在暴露于死亡风险的天数方面存在差异 为了解决这个问题 我们使用了修改后的逻辑回归 它将暴露天数合并到链接函数中 正如 Shaffer
  • SwiftUI:设置选择器行高

    对于大字体 a 中的线条Picker是重叠的 我该如何更改Picker s行高 提示 lineSpacing修饰符不会这样做 See Also 这个问题类似于Ejaaz 但他的问题至今尚未得到答复 问题 The Code 以下可运行代码产生