Код: Выделить всё
struct ContentView: View {
@State var textInput: String = "Testing"
private let inputCornerRadius: CGFloat = 24
var body: some View {
HStack(alignment: .bottom, spacing: 8) {
TextField("Chat", text: $textInput, axis: .vertical)
.lineLimit(1...9)
.textFieldStyle(.plain)
Button(action: send) {
Image(systemName: "paperplane.fill")
.foregroundStyle(.background)
.imageScale(.medium)
.padding(10)
.background(
Circle()
.fill(Color(.label))
)
}
}
.padding(.vertical, 8)
.padding(.leading, 10)
.padding(.trailing, 6)
.background(
RoundedRectangle(cornerRadius: inputCornerRadius, style: .continuous)
.fill(Color(.secondarySystemBackground))
)
.clipShape(RoundedRectangle(cornerRadius: inputCornerRadius, style: .continuous))
.padding(.horizontal, 10)
}
private func send() {}
}

Проблема в том, что текстовое поле выровнено по нижнему краю. Я хочу, чтобы оно было по центру. Но вот в чем сложная часть: я хочу, чтобы кнопка отправки всегда была выровнена по низу (или по центру, если это всего лишь одна строка).
Если я изменю выравнивание HStack на .center, оно будет работать именно так, как я хочу для однострочного текста, но как только он станет несколькими строками, кнопка отправки будет центрирована, а не выровнена по низу.

Итак, вот мои требования:
- Для однострочного текста и кнопка ввода текста, и кнопка отправки центрируются по вертикали.
- Для многострочного текста кнопка отправки выравнивается по нижней части серого фона (плюс отступы).
- Установить выравнивание по .center (выше я объяснил, почему это не работает)
- Обернуть TextField в другой HStack, выровненный по центру (родительский элемент по-прежнему выровнен по нижнему краю). Это не дало никакого эффекта.
- Добавлен VStack вокруг TextField с разделителями вверху и внизу. В результате вся высота представления растянулась в соответствии с высотой родительского представления (чего мне не нужна).
- Добавлен .alignmentGuide(.bottom) { d in d[.bottom] к кнопке и установлено выравнивание на .center. Эффекта по-прежнему не было, и кнопка оставалась в центре.
Как я могу заставить кнопку всегда выравниваться по нижнему краю, в то время как TextField остается по центру?
Подробнее здесь: https://stackoverflow.com/questions/799 ... tui-hstack
Мобильная версия