Как прикрепить мою пользовательскую вкладку снизу на каждом Iphone (с SafeArea и без нее)?

#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.