#swift #swiftui
Вопрос:
struct EntryView : View {
@State private var isSelected = 0
var body : some View {
VStack {
if isSelected == 0 {
Text("home") }
}
Spacer()
TabBar(isSelected: $isSelected)
}
}
struct TabBar: View {
@Binding isSelected : Int
var body : some View {
HStack {
Button(action: {
self.isSelected = 0 },
label: {
VStack {
if isSelected == 0 {
Image(systemName: "house.fill")
} else {
Image(systemName: "house")
}
}
}
}.background(LinearGradient())
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height / 12)
}
}
Я хочу прикрепить свою пользовательскую вкладку в нижней части экрана на экране любого размера. На iphone 8 он находится внизу, но, например, на iphone 12 его нет. Мне нужно обойти безопасную зону на iphone с насечками, но остаться на iphone 8 и т. Д.
Ответ №1:
Вы можете проверить, есть ли выемка или нет, как это
extension UIDevice {
var hasNotch: Bool {
if #available(iOS 11.0, *) {
let keyWindow = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
return keyWindow?.safeAreaInsets.bottom ?? 0 > 0
}
return false
}
}
if UIDevice.current.hasNotch {
VStack{
}
.ignoresSafeArea()
} else {
VStack{
}
}
Комментарии:
1. Расширение работает, оно распознает, есть ли на устройстве зазубрина, но игнорирует функцию safearea (), ничего не делая.
2. Я решил эту проблему. Мне просто нужно было добавить ignoresafearea() в модификатор .background.