mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
|   
											2 years ago
										 | // Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. | ||
|  | 
 | ||
|  | import SwiftUI | ||
|  | import SessionUIKit | ||
|  | 
 | ||
|  | struct TabBarButton: View { | ||
|  |     @Binding var isSelected: Bool | ||
|  |      | ||
|  |     let text: String | ||
|  |      | ||
|  |     var body: some View { | ||
|  |         ZStack( | ||
|  |             alignment: .bottom | ||
|  |         ) { | ||
|  |             Text(text) | ||
|  |                 .bold() | ||
|  |                 .font(.system(size: Values.mediumFontSize)) | ||
|  |                 .foregroundColor(themeColor: .textPrimary) | ||
|  |                 .padding(.bottom, 5) | ||
|  |                 .frame( | ||
|  |                     maxWidth: .infinity, | ||
|  |                     maxHeight: .infinity | ||
|  |                 ) | ||
|  |             if isSelected { | ||
|  |                 Rectangle() | ||
|  |                     .foregroundColor(themeColor: .primary) | ||
|  |                     .frame( | ||
|  |                         maxWidth: .infinity, | ||
|  |                         maxHeight: 5 | ||
|  |                     ) | ||
|  |                     .padding(.horizontal, Values.verySmallSpacing) | ||
|  |             } | ||
|  |              | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | struct CustomTopTabBar: View { | ||
|  |     @Binding var tabIndex: Int | ||
|  |     let tabTitles: [String] | ||
|  |      | ||
|  |     private static let height = isIPhone5OrSmaller ? CGFloat(32) : CGFloat(48) | ||
|  |      | ||
|  |     var body: some View { | ||
|  |         HStack(spacing: 0) { | ||
|  |             ForEach(0..<tabTitles.count, id: \.self) { index in | ||
|  |                 TabBarButton( | ||
|  |                     isSelected: .constant(tabIndex == index), | ||
|  |                     text: tabTitles[index] | ||
|  |                 ) | ||
|  |                 .onTapGesture { onButtonTapped(index: index) } | ||
|  |             } | ||
|  |         } | ||
|  |         .frame( | ||
|  |             maxWidth: .infinity, | ||
|  |             maxHeight: Self.height | ||
|  |         ) | ||
|  |         .border(width: 1, edges: [.bottom], color: .borderSeparator) | ||
|  |     } | ||
|  |      | ||
|  |     private func onButtonTapped(index: Int) { | ||
|  |         withAnimation(.easeInOut(duration: 0.2)) { | ||
|  |             tabIndex = index | ||
|  |         } | ||
|  |     } | ||
|  | } |