Увеличьте цель касания View без изменения позиции - PullRequest
0 голосов
/ 19 января 2020

У меня есть этот маленький парень:

VStack(alignment: .leading, spacing: 4) {
    Text("Name")
        .font(.subheadline).bold()
    TextField("Name", text: self.$name)
}

, и он выглядит так: enter image description here

Теперь я хочу увеличить цель крана так, Вы можете нажать в любом месте в VStack, чтобы вызвать клавиатуру для TextField. Какой хороший способ сделать это?

Я рассмотрел добавление onTapGesture в VStack, но, кажется, невозможно вызвать стать первым респондентом для TextFields, поэтому мне нужно увеличить рамку TextField, чтобы иметь больше нажатий цель. Может быть, вместо этого поместите его в ZStack с отступом выше, но сложность заключается в том, как я могу убедиться, что он визуально сложен ниже заголовка, когда высота заголовка является динамической c? Возможно, contentShape можно было бы использовать для добавления к нему отступов?

1 Ответ

0 голосов
/ 19 января 2020

Вы можете создать подкласс UITextField и переопределить point(inside:with:) метод:

open override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    let bounds = self.bounds
    let extended = bounds.insetBy(dx: -10, dy: -10)
    let inside = extended.contains(point)
    return inside
}

и использовать свой собственный подкласс UITextField в SwiftUI. Возможно, вам придется создать VStack подкласс, чтобы разрешить касания за пределами VStack, если касание находится в одном из его подвидов (с расширенным полем касания).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...