SwiftUI Touchable Область кнопки - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь увеличить область нажатия кнопки внутри NavigationView. Это не работает, даже если площадь увеличена. Мой код ниже:

var body: some View {
NavigationView {
    List(taskStore.tasks) { tasks in
        Text(tasks.name)
    }
.navigationBarTitle("Tasks")
.navigationBarItems(
    trailing: Button(action: { 
    self.modalIsPresented = true 
}){
     Image(systemName: "plus")
    .frame(width: 200, height: 200)
    .contentShape(Rectangle())
    .background(Color.yellow)
})}

Зеленая область сенсорная, а красная область не сенсорная.

enter image description here

Я нашел решение онлайн, которое работает. Однако это решение работает только для кнопки, которой нет в NavigationView. Поэтому, если я помещаю кнопку в «некоторый вид», как показано ниже, она работает в соответствии с решением:

var body: some View {
Button(action: {self.modalIsPresented = true} ) {
Text("Default padding")
.padding(50)
.background(Color.yellow)
}}}

Но когда я помещаю кнопку в виде навигации, как мой код, желтая область не трогательно. Как сделать так, чтобы вся желтая область (красная рамка) была сенсорной, как решение?

Спасибо: D

Пример решения: enter image description here

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Если вам нужна кнопка на панели навигации, она будет доступна для нажатия только внутри панели навигации, независимо от того, на что вы пытаетесь установить рамку изображения, и NavigationView определяет эту высоту, независимо от того, какие дочерние элементы - кнопка, в этом случае - может потребоваться.

Исторически изменение высоты панели навигации не поддерживалось: см. Комментарии здесь

Теперь с ZStacks можно сделать что-то интересное - поставить кнопку поверх вид навигации, возможно, но вы не сможете поместить что-либо большее, чем заданная высота, внутри панели навигации.

0 голосов
/ 29 февраля 2020

Я думаю, вы можете найти желаемый эффект внутри .navigationBarItems(trailing:), если вы используете модификатор .contentShape(Rectangle()). Или вы можете использовать другие формы, чтобы удовлетворить ваши потребности. Затем отрегулируйте размер .frame, чтобы отрегулировать область смачивания по желанию. Вот краткий пример кода.

struct ContentView: View {
var body: some View {
    NavigationView {
        List {
            Text("Hello, World")
        }
    .navigationBarTitle(Text("Items"))
        .navigationBarItems(trailing: Button(action: {
            print("Do Something")
        }, label: {
            Image(systemName: "plus")
                .frame(width: 100, height: 50)
                .contentShape(Rectangle())
                .border(Color.red, width: 3)
                .background(Color.gray)
        }))
    }
  }
}

Надеюсь, это поможет.

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