如何在SwiftUI中创建一个带有View并返回自定义结果的函数?

迅捷朋克

我想从ContentView中构建一个独立的函数,可以使用此func初始化一些值,例如在此向下代码中,我希望使用该函数获取View的大小,但是由于我的未知原因,它返回零,我认为背景修改不符合我在此版本中的要求。有什么帮助吗?

  func viewSizeReaderFunction<Content: View>(content: Content) -> CGSize {
    
    var sizeOfView: CGSize = CGSize()
    
    content
        .background(
            GeometryReader { geometry in
                Color
                    .clear
                    .onAppear() { sizeOfView =  geometry.size }
                
            })

    return sizeOfView

 }

let sizeOfText: CGSize = viewSizeReaderFunction(content: Text("Hello, world!"))

struct ContentView: View {

    var body: some View {

        Color.red
            .onAppear() {
                print(sizeOfText)
            }

    }
  
}
新开发者

一般的想法是使视图使用来报告其大小preference,并创建一个视图修饰符以捕获该大小。但是,就像@RobNapier所说的那样,该结构必须在视图层次结构中,并且因此在呈现上下文中,才能讨论大小。

struct SizeReporter: ViewModifier {
   @Binding var size: CGSize
   func body(content: Content) -> some View {
      content
         .background(GeometryReader { geo in
             Color.clear
                  .preference(key: SizePreferenceKey.self, value: geo.size)
         })
         .onPreferenceChange(SizePreferenceKey.self, perform: { value in
             size = value
         }
   }
}

而且我们需要定义SizePreferenceKey

extension SizeReporter {
   private struct SizePreferenceKey: PreferenceKey {
      static let defaultValue: CGSize = .zero
      static func reduce(value: inout CGSize, nextValue: () -> CGSize) {
         value = nextValue()
      }
   }
}

您可以在上创建一个便捷方法View

extension View {
   func getSize(_ size: Binding<CGSize>) -> some View {
      self.modifier(SizeReporter(size: size))
   }
}

并像这样使用它:

@State var size: CGSize = .zero

var body: some View {
   Text("hello").getSize($size)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SwiftUI中创建一个既可以用作安全字段(带有眼睛图标)又可以用作普通TextField的自定义TextInput

来自分类Dev

如何创建一个带有输入的闭包的struct参数,在SwiftUI中返回“ some View”而不是“ AnyView”?

来自分类Dev

如何创建一个带有自定义差异到 master 分支的 git 分支?

来自分类Dev

如何在Magento中为一个类别创建自定义模板?

来自分类Dev

如何在Tuleap中创建一个完全自定义的主题?

来自分类Dev

如何在 Wordpress 中创建一个简单的自定义短代码?

来自分类Dev

创建一个android自定义视图:一行带有按钮的行

来自分类Dev

我可以创建带有另一个异常的自定义异常(类似于Java中的“ causedby”)

来自分类Dev

如何在具有两个自定义UITableViewCells的一个视图控制器中创建两个表视图?

来自分类Dev

如何将多个选择语句的结果作为一个自定义表返回

来自分类Dev

如何创建一个创建自定义make目标的qmake函数?

来自分类Dev

如何在laravel 5.2中对API返回的结果创建自定义分页?

来自分类Dev

是否可以在自定义View类中创建另一个控件?

来自分类Dev

如何在自定义控件中创建一个按钮以触发onClick事件,并以自定义控件所在的主要形式对其进行处理?

来自分类Dev

如何创建一个包含自定义变量的函数

来自分类Dev

如何创建一个自定义函数以使用purrr或lapply?

来自分类Dev

如何创建一个函数可以使用自定义的可比 C++?

来自分类Dev

如何在MongoDB中创建一个自定义对象作为字段名称为键的输出?

来自分类Dev

一个人如何在Outlook 2011 Mac中创建自定义“智能文件夹”?

来自分类Dev

如何在 actionscript 3.0 中为音乐播放器创建一个简单的自定义搜索栏

来自分类Dev

创建一个自定义函数来替换R中的值

来自分类Dev

是否有一个函数可以在我的古腾堡块中创建一个自定义块?

来自分类Dev

如何创建一个自定义的crontab?

来自分类Dev

如何创建一个自定义的react hook?

来自分类Dev

如何创建一个erlydtl自定义标签?

来自分类Dev

如何在Android自定义数据绑定中传递带有参数的函数

来自分类Dev

如何在Android自定义数据绑定中传递带有参数的函数

来自分类Dev

在FreeBSD中创建一个自定义用户

来自分类Dev

如何在AMPL中创建自定义函数?

Related 相关文章

  1. 1

    如何在SwiftUI中创建一个既可以用作安全字段(带有眼睛图标)又可以用作普通TextField的自定义TextInput

  2. 2

    如何创建一个带有输入的闭包的struct参数,在SwiftUI中返回“ some View”而不是“ AnyView”?

  3. 3

    如何创建一个带有自定义差异到 master 分支的 git 分支?

  4. 4

    如何在Magento中为一个类别创建自定义模板?

  5. 5

    如何在Tuleap中创建一个完全自定义的主题?

  6. 6

    如何在 Wordpress 中创建一个简单的自定义短代码?

  7. 7

    创建一个android自定义视图:一行带有按钮的行

  8. 8

    我可以创建带有另一个异常的自定义异常(类似于Java中的“ causedby”)

  9. 9

    如何在具有两个自定义UITableViewCells的一个视图控制器中创建两个表视图?

  10. 10

    如何将多个选择语句的结果作为一个自定义表返回

  11. 11

    如何创建一个创建自定义make目标的qmake函数?

  12. 12

    如何在laravel 5.2中对API返回的结果创建自定义分页?

  13. 13

    是否可以在自定义View类中创建另一个控件?

  14. 14

    如何在自定义控件中创建一个按钮以触发onClick事件,并以自定义控件所在的主要形式对其进行处理?

  15. 15

    如何创建一个包含自定义变量的函数

  16. 16

    如何创建一个自定义函数以使用purrr或lapply?

  17. 17

    如何创建一个函数可以使用自定义的可比 C++?

  18. 18

    如何在MongoDB中创建一个自定义对象作为字段名称为键的输出?

  19. 19

    一个人如何在Outlook 2011 Mac中创建自定义“智能文件夹”?

  20. 20

    如何在 actionscript 3.0 中为音乐播放器创建一个简单的自定义搜索栏

  21. 21

    创建一个自定义函数来替换R中的值

  22. 22

    是否有一个函数可以在我的古腾堡块中创建一个自定义块?

  23. 23

    如何创建一个自定义的crontab?

  24. 24

    如何创建一个自定义的react hook?

  25. 25

    如何创建一个erlydtl自定义标签?

  26. 26

    如何在Android自定义数据绑定中传递带有参数的函数

  27. 27

    如何在Android自定义数据绑定中传递带有参数的函数

  28. 28

    在FreeBSD中创建一个自定义用户

  29. 29

    如何在AMPL中创建自定义函数?

热门标签

归档