应用 Frame 修饰符时出现 ScrollView 布局错误

Posted

技术标签:

【中文标题】应用 Frame 修饰符时出现 ScrollView 布局错误【英文标题】:ScrollView layout bug when applying Frame modifier 【发布时间】:2020-03-18 15:58:23 【问题描述】:

我偶然发现了 SwiftUI 中 ScrollView 的布局问题。 我认为这是一个 SwiftU 错误,但我想与您再次确认。

这是我的简单视图代码:

struct ContentView: View 
    var body: some View 
        ScrollView(.vertical) 
            Text("Hello, World!")
                .background(Color.red)
        
        .frame(width: 300, height: 300)
        .background(Color.blue)
    

这就是它的外观。您可以看到“Hello World”在滚动视图框架之外。这正常吗?有什么办法可以解决吗?

当我删除 frame(...) 修饰符时,一切正常。

【问题讨论】:

为错误投票。越早提交给 Apple 越好。 @Asperi 我阿吉!不幸的是,当前版本中有很多错误。 ...顺便说一句,我使用不同的解决方法(见我的回答) 【参考方案1】:

这里有一些解决方法(在某些情况下作为临时解决方案可能是可以接受的)

使用 Xcode 11.2 / ios 13.2 测试

var body: some View 
    GeometryReader  gp in
        ScrollView 
            Text("Hello, World!")
                .background(Color.red)
        
        .frame(maxWidth: 300, maxHeight: 300)
        .background(Color.blue)
    

【讨论】:

【参考方案2】:

有一个可怕的错误,我建议下一个解决方法

struct ContentView: View 
    var body: some View 
        ScrollView(.vertical, showsIndicators: true) 
            Text("Hello, World!")
                .background(Color.red)
        
        // workaround, please report the bug to Apple !!
        .offset(x: 0, y: 0.5)
        .background(Color.yellow)
        .frame(width: 200, height: 200)
    

【讨论】:

以上是关于应用 Frame 修饰符时出现 ScrollView 布局错误的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 条件 .frame 视图修饰符

修饰符“覆盖”不适用于“本地功能”

bash 中的访问修饰符

VS2010 中的“重新定义;不同的类型修饰符”

为啥我的 UITextView 在我使用 frame 属性时出现,但在我使用约束时却没有?

尝试填充占位符时出现Tensorflow错误