English 中文(简体)
SwiftUI: How do I position a button x points above a sheet?
原标题:

I am trying to recreate a Maps-style UI with a persistent bottom sheet and controls fixed above.

Apple Maps UI with controls above

☝️ Example here, the "Look Around" binoculars button and AQI from Apple Maps follow the movement of the sheet.

I ve got my sheet set up but I m curious what the approach for this would be?

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack {
            HomeView()
                .sheet(isPresented: .constant(true)) {
                    ActivityView()
                        .presentationDetents([.medium, .large, .height(80)])
                        .presentationCornerRadius(Constants.cornerRadius)
                        .presentationBackgroundInteraction(.enabled)
                        .interactiveDismissDisabled(true)
                }
        }
    }
}
问题回答

To achieve your purpose, it is recommended to utilize a custom SheetView. The following example demonstrates the customization of a SheetView with transitions and animations:

Hope it helps you.

import SwiftUI

struct SheetView: View {
    @State var isShowCustomSheetView: Bool = false
    
    var body: some View {
        ZStack(alignment: .bottom) {
            VStack {
                Button {
                    isShowCustomSheetView.toggle()
                } label: {
                    Text("Show Custom Sheet View")
                }
                Spacer()
            }
            
            if isShowCustomSheetView {
                CustomSheetView()
                    .frame(height: 400)
                    .transition(.move(edge: .bottom))
                    .animation(.easeInOut)
            }
        }
        .edgesIgnoringSafeArea(.bottom)
    }
}

struct CustomSheetView: View {
    
    var body: some View {
        VStack(spacing: 20) {
            HStack {
                Button {
                } label: {
                    Image(systemName: "binoculars.fill")
                }
                
                Spacer()
                
                Button {
                } label: {
                    Image(systemName: "sun.dust.fill")
                }
            }
            .padding(.horizontal)
            
            VStack {
                RoundedRectangle(cornerRadius: 2)
                    .fill(.gray)
                    .frame(width: 50, height: 5)
                    .padding(.top)
                
                Spacer()
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(Color.black.opacity(0.6))
            .clipShape(RoundedRectangle(cornerRadius: 15))
        }
    }
}

struct SheetView_Previews: PreviewProvider {
    static var previews: some View {
        SheetView()
    }
}

enter image description here





相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...

热门标签