开发者社区> 问答> 正文

为什么在更改状态变量时接口会抽动?

内容视图:

@State var login: String = ""
@State var password: String = ""
@State var isLoginTextViewActive = false
@State var isPasswordTextViewActive = false

    VStack {
        TextField("Login", text: $login, onEditingChanged: { isEditing in
            print(isEditing)
            self.isLoginTextViewActive = isEditing
            }
        )
        TextField("Password", text: $password)
        HorizontalLine(color: isLoginTextViewActive ? Color.yellow : Color.black, height: CGFloat(1))
        }.frame(width: CGFloat(200), alignment: .center)

线路代码:

struct HorizontalLineShape: Shape {
    func path(in rect: CGRect) -> Path {

        let fill = CGRect(x: 0, y: 0, width: rect.size.width, height: rect.size.height)
        var path = Path()
        path.addRoundedRect(in: fill, cornerSize: CGSize(width: 2, height: 2))

        return path
    }
}

struct HorizontalLine: View {
    private var color: Color? = nil
    private var height: CGFloat = 1.0

    init(color: Color, height: CGFloat = 1.0) {
        self.color = color
        self.height = height
    }

    var body: some View {
        HorizontalLineShape().fill(self.color!).frame(minWidth: 0, maxWidth: .infinity, minHeight: height, maxHeight: height)
    }
}

当您在“TextView”之间更改焦点时,它们开始抽动,好像是由于高度的变化。我检查了一下,每次调用行初始化器时,我都不知道该如何处理它。

展开
收起
游客5akardh5cojhg 2019-12-05 22:17:54 366 0
1 条回答
写回答
取消 提交回答
  • 这是因为当前文本字段中有一个字体大小的错误。如果您手动设置字体大小(例如20),它将按您的要求工作。

    var body: some View {
        VStack {
            TextField("Login", text: $login, onEditingChanged: { isEditing in
                print(isEditing)
                self.isLoginTextViewActive = isEditing
            })
            .font(.system(size: 20, weight: .medium, design: .default)) // SET SIZE
    
            TextField("Password", text: $password)
                .font(.system(size: 20, weight: .medium, design: .default)) // SET SIZE
    
            Rectangle()
                .frame(height: 1)
                .foregroundColor(isLoginTextViewActive ? Color.yellow : Color.black)
        }.frame(width: CGFloat(200), alignment: .center)
    }
    
    2019-12-05 22:18:20
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
对象的生命期管理 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多