#swift #swiftui
#swift #swiftui
Вопрос:
Я наложил кнопку / текст на изображение, но кнопка не отвечала. Есть ли какое-либо решение? Похоже, что скрытый вид панели навигации блокирует кнопку или изображение блокирует сенсорный жест. Как я должен это исправить?
struct Tutorial: View {
let dataModel = DataModel()
@State var messageIndex = 0
var body: some View{
ZStack{
Image("Tutorial UI")
.resizable()
.scaledToFill()
.overlay(
VStack(spacing:20){
VStack(spacing:30){
HStack{
Spacer()
Text("Next")
.foregroundColor(.blue)
.fontWeight(.black)
.onTapGesture(count:1) {
if self.messageIndex != 4{
self.messageIndex = 1
}else{
self.messageIndex = 0
}
}
}
Text(dataModel.tutorialMessage[messageIndex][0])
.fontWeight(.black)
.font(.largeTitle)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .center)
}.padding()
Text(dataModel.tutorialMessage[messageIndex][1])
.font(.title)
Spacer()
}.padding(.horizontal, 48)
.padding(.top, 50)
)
}.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity,
alignment: .center)
.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
}
}
}
Комментарии:
1. Трудно воспроизвести ваш случай из-за множества отсутствующих зависимостей в предоставленном снимке кода. Вы видите кнопку (т. Е. текст с жестом касания) на экране? Вы пробовали точку останова внутри действия крана, чтобы посмотреть, идет ли она туда? Минимальный воспроизводимый пример был бы гораздо полезнее.
2. Еще одна вещь, которую вы обнаружите, это то, что вы не можете задавать последующие вопросы в сообщении. Ответ — да, в качестве кнопки навигации, и Google предоставит вам МНОЖЕСТВО примеров и руководств по их использованию. Я скажу, что вы не можете скрыть панель навигации и использовать NavigationBarButton.
Ответ №1:
К чему клонил @Asperi, так это к тому, что вы предоставили фрагмент кода, который зависит от модели, о которой мы ничего не знаем. Когда вы публикуете код, вы должны публиковать упрощенную версию. В этом случае я взял ваш код и заменил вашу модель данных на простой массив. Я также загрузил изображение для использования из изображения дня НАСА для использования. И Аспери решил проблему своим вторым вопросом…
Глядя на это, первое, что меня поразило, это то, что вы слишком стараетесь расположить вещи именно так в SwiftUI. Это так не работает. И это привело к вашим проблемам. Я вытащил ваши фреймы, которые на самом деле ничего не делают в этом макете. Я также извлек определенные количества отступов. Затем я вытащил разделитель (), который был в вашем HStack, и на экране появилась ваша кнопка «Далее». Я подозреваю, что установка изображения как .scaledToFill() и изображения, которое отличается от тех же размеров экрана, привела к тому, что вид был больше, чем экран, который вы могли видеть. Установка разделителя () привела к тому, что ваша кнопка «Далее» переместилась полностью вправо, что было за пределами экрана. Как только я смог это увидеть, я смог щелкнуть по нему, и он работал нормально.
У вас чрезвычайно сложная структура, которая создает довольно простой макет. В следующий раз начните с малого и добавляйте только то, что вам нужно. В SwiftUI лучше использовать меньший макет, иначе вы столкнетесь с непредвиденными последствиями. Попробуйте изменить HStack в вашем оверлее на следующий, а затем работайте оттуда, шаг за шагом:
HStack{
Text("Next")
.foregroundColor(.blue)
.fontWeight(.black)
.onTapGesture(count:1) {
if self.messageIndex != 4{
self.messageIndex = 1
}else{
self.messageIndex = 0
}
}
}
Помните, что в SwiftUI дочерний вид определяет свой собственный размер. Не пытайтесь навязывать что-либо от родителя.