MST
星途 面试题库

面试题:SwiftUI自定义视图容器的布局与约束

在SwiftUI的自定义视图容器中,如何处理子视图的布局和约束?例如,实现一个水平排列子视图且每个子视图宽度相等的自定义视图容器,需要考虑不同屏幕尺寸的适配,阐述实现思路并写出关键代码。
46.7万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 在SwiftUI中创建一个自定义视图容器结构体,该结构体遵循View协议。
  2. 使用HStack来实现子视图的水平排列。
  3. 为了让每个子视图宽度相等,可以使用GeometryReader获取父视图的宽度,然后根据子视图的数量来分配宽度。
  4. 为了适配不同屏幕尺寸,GeometryReader会自动根据当前设备屏幕尺寸动态调整子视图的宽度。

关键代码

import SwiftUI

struct EqualWidthHStack: View {
    let subviews: [AnyView]
    
    var body: some View {
        GeometryReader { geometry in
            HStack {
                ForEach(subviews, id: \.self) { subview in
                    subview
                        .frame(width: geometry.size.width / CGFloat(subviews.count))
                }
            }
        }
    }
}

// 使用示例
struct ContentView: View {
    var body: some View {
        EqualWidthHStack(subviews: [
            AnyView(Color.red),
            AnyView(Color.green),
            AnyView(Color.blue)
        ])
    }
}