add swipe
This commit is contained in:
		
							parent
							
								
									6583ce38bb
								
							
						
					
					
						commit
						3d24e0afce
					
				@ -14,6 +14,7 @@ struct TopBarView: View {
 | 
			
		||||
    @Binding var isSideMenuPresented: Bool
 | 
			
		||||
 | 
			
		||||
    @State private var searchText: String = ""
 | 
			
		||||
    @State private var isSearchBarVisible: Bool = false
 | 
			
		||||
    
 | 
			
		||||
    var isHomeTab: Bool {
 | 
			
		||||
        return title == "Home"
 | 
			
		||||
@ -105,15 +106,34 @@ struct TopBarView: View {
 | 
			
		||||
            .padding()
 | 
			
		||||
            .frame(height: 50) // Стандартная высота для нав. бара
 | 
			
		||||
            
 | 
			
		||||
            if isChatsTab {
 | 
			
		||||
            if isChatsTab && isSearchBarVisible {
 | 
			
		||||
                searchBar
 | 
			
		||||
                    .padding(.horizontal)
 | 
			
		||||
                    .padding(.bottom, 8)
 | 
			
		||||
                    .transition(.move(edge: .top).combined(with: .opacity))
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Divider()
 | 
			
		||||
        }
 | 
			
		||||
        .background(Color(UIColor.systemBackground))
 | 
			
		||||
        .animation(.spring(response: 0.35, dampingFraction: 0.85), value: isSearchBarVisible)
 | 
			
		||||
        .onReceive(NotificationCenter.default.publisher(for: .chatsTabRevealSearchBar)) { _ in
 | 
			
		||||
            guard isChatsTab else { return }
 | 
			
		||||
            withAnimation {
 | 
			
		||||
                isSearchBarVisible = true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        .onReceive(NotificationCenter.default.publisher(for: .chatsTabHideSearchBar)) { _ in
 | 
			
		||||
            guard isChatsTab else { return }
 | 
			
		||||
            withAnimation {
 | 
			
		||||
                isSearchBarVisible = false
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        .onChange(of: isChatsTab) { isChats in
 | 
			
		||||
            if !isChats {
 | 
			
		||||
                isSearchBarVisible = false
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -115,6 +115,7 @@ struct ChatsTab: View {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        .listStyle(.plain)
 | 
			
		||||
        .simultaneousGesture(searchBarGesture)
 | 
			
		||||
//        .safeAreaInset(edge: .top) {
 | 
			
		||||
//            VStack(spacing: 0) {
 | 
			
		||||
//                searchBar
 | 
			
		||||
@ -152,6 +153,21 @@ struct ChatsTab: View {
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private var searchBarGesture: some Gesture {
 | 
			
		||||
        DragGesture(minimumDistance: 24)
 | 
			
		||||
            .onEnded { value in
 | 
			
		||||
                let verticalTranslation = value.translation.height
 | 
			
		||||
                let horizontalTranslation = value.translation.width
 | 
			
		||||
                guard abs(verticalTranslation) > abs(horizontalTranslation) else { return }
 | 
			
		||||
 | 
			
		||||
                if verticalTranslation > 24 {
 | 
			
		||||
                    NotificationCenter.default.post(name: .chatsTabRevealSearchBar, object: nil)
 | 
			
		||||
                } else if verticalTranslation < -24 {
 | 
			
		||||
                    NotificationCenter.default.post(name: .chatsTabHideSearchBar, object: nil)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private var isSearching: Bool {
 | 
			
		||||
        !searchText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
 | 
			
		||||
    }
 | 
			
		||||
@ -620,4 +636,6 @@ private struct ChatPlaceholderView: View {
 | 
			
		||||
 | 
			
		||||
extension Notification.Name {
 | 
			
		||||
    static let debugRefreshChats = Notification.Name("debugRefreshChats")
 | 
			
		||||
    static let chatsTabRevealSearchBar = Notification.Name("chatsTabRevealSearchBar")
 | 
			
		||||
    static let chatsTabHideSearchBar = Notification.Name("chatsTabHideSearchBar")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user