Во-первых, я рассмотрел аналогичный вопрос, но он не касается моего варианта использования.
Текущая таблица действий в SwiftUI на iPad
Моя проблема в том, что У меня есть NavigationBarItem
в моем NavigationView
, который будет переключать ActionSheet
при нажатии. Это поведение работает правильно при использовании на iPhone.
Однако, когда я использую это на iPad, обе кнопки на моем экране становятся серыми, и ничего не происходит. Повторное нажатие на кнопки сделает их активными (синие), но опять же, лист не отображается.
Наконец, если я выберу кнопку в середине экрана (Показать кнопку), то таблица действий будет правильно представлена на iPad.
Я тестировал Xcode 11 & iOS 13.5 и Xcode 12 & iOS 14. В поведении нет никаких изменений.
import SwiftUI
struct ContentView: View {
@State private var isButtonSheetPresented = false
@State private var isNavButtonSheetPresented = false
var body: some View {
NavigationView {
Button(action: {
// Works on iPad & iPhone
self.isButtonSheetPresented.toggle()
}) {
Text("Show Button")
}
.actionSheet(isPresented: $isButtonSheetPresented,
content: {
ActionSheet(title: Text("ActionSheet"))
})
.navigationBarTitle(Text("Title"),
displayMode: .inline)
.navigationBarItems(trailing:
Button(action: {
// Works on iPhone, fails on iPad
self.isNavButtonSheetPresented.toggle()
}) {
Text("Show Nav")
}
.actionSheet(isPresented: $isNavButtonSheetPresented,
content: {
ActionSheet(title: Text("ActionSheet"))
})
)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
Наконец, это как он отображается на iPad при нажатии на «Показать навигацию»:
This is a simplified setup for the screen where this issue occurs. I will need to retain the navigation settings shown, but have included them for clarity.
*** UPDATED ***
While it is not possible for the real app behind this, I did remove the .navigationViewStyle(StackNavigationViewStyle())
setting, which did make an ActionSheet appear, although in the wrong spot as seen below.
This also results in bizarre placement for the Button one accessed via "Show Button".
введите описание изображения здесь