A
Alexander Kraev
@swiftui_dev1.1K подп.
2.7Kпросмотров
28 августа 2024 г.
🎬 ВидеоScore: 3.0K
🔥 Весьма удобный и крутой лайфхак, как можно быстро помочь себе в верстке 🧨 Really nice and awesome lifehack how to help yourself with layouts Думаю, уже все знают про то, как найти размер вьюхи с помощью GeomertyReader, если .frame не задан. Если нет, то я напомню: Hope everyone already knows how to find the view size using GeomertyReader if .frame is not specified. Don’t worry, I'll remind you: import SwiftUI struct SizePreferenceKey: PreferenceKey { static var defaultValue: CGSize = .zero static func reduce(value: inout CGSize, nextValue: () -> CGSize) { value = nextValue() } } struct MeasureSizeModifier: ViewModifier { func body(content: Content) -> some View { content.overlay(GeometryReader { geometry in Color.clear.preference(key: SizePreferenceKey.self, value: geometry.size) }) } } extension View { func measureSize(perform action: @escaping (CGSize) -> Void) -> some View { self.modifier(MeasureSizeModifier.init()) .onPreferenceChange(SizePreferenceKey.self, perform: action) } } Теперь создадим структуру и модификатор, которые будем использовать для отображения границ размера элемента: Next let's create a struct and modifier for displaying the view size: import SwiftUI struct Measurements: View { @State private var size: CGSize = .zero let showSize: Bool let color: Color var body: some View { label.measureSize { size = &#036;0 } } var label: some View { ZStack(alignment: .topTrailing) { Rectangle() .strokeBorder( color, lineWidth: 1 ) Text("H:&#092;(size.height.formatted) W:&#092;(size.width.formatted)") .foregroundColor(.black) .font(.system(size: 8)) .opacity(showSize ? 1 : 0) } } } extension View { func measured(_ showSize: Bool = true, _ color: Color = Color.red) -> some View { self .overlay(Measurements(showSize: showSize, color: color)) } } extension CGFloat { var formatted: String { abs(self.remainder(dividingBy: 1)) <= 0.001 ? .init(format: "%.0f", self) : .init(format: "%.2f", self) } } extension Double { var formatted: String { CGFloat(self).formatted } } А теперь можете сравнить итоговые вьюхи с макетами и проверить на случайные .padding(): That’s all! Now you can compare views in Canvas with the designed in Figma and check on accidental .padding(): YourView() .measure() #howto #getsources #groovy @swiftui_dev
2.7K
просмотров
2727
символов
Да
эмодзи
Да
медиа

Другие посты @swiftui_dev

Все посты канала →
🔥 Весьма удобный и крутой лайфхак, как можно быстро помочь — @swiftui_dev | PostSniper