ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SwiftUI] ๋””๋ฐ”์ด์Šค์˜ width, height ๊ตฌํ•˜๊ธฐ
    iOS 2023. 8. 3. 14:18

    SwiftUI์—์„œ ๋””๋ฐ”์ด์Šค์˜ ์‚ฌ์ด์ฆˆ (width, height)๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

    1. GeometryReader ์‚ฌ์šฉํ•˜๊ธฐ

    import SwiftUI
    
    struct ContentView: View {
    
        var body: some View {
            GeometryReader { geometry in
                ZStack {
                    Color
                        .yellow
                        .frame(
                            width: geometry.size.width,
                            height: geometry.size.height
                        )
                    
                    VStack {
                        Text("Width \(geometry.size.width)")
                        Text("Height \(geometry.size.height)")
                    }
                }
            }
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }

    GeometryReader์—์„œ height๋Š” safeArea๋ฅผ ์ œ์™ธํ•œ ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    safeArea๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ ์•„๋‹ˆ๋ผ EdgeInsets์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

     

    ๋งŒ์•ฝ safeArea๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์˜์—ญ์˜ ๋„ˆ๋น„, ๋†’์ด๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด, edgesIgnoringSareArea(.all)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

    struct ContentView: View {
    
        var body: some View {
            GeometryReader { geometry in
                ZStack {
                    Color
                        .yellow
                        .frame(
                            width: geometry.size.width,
                            height: geometry.size.height
                        )
                    
                    VStack {
                        Text("Width \(geometry.size.width)")
                        Text("Height \(geometry.size.height)")
                    }
                }
            }
            .edgesIgnoringSafeArea(.all)
        }
    }

     

    ๋•Œ๋กœ๋Š” ๋””๋ฐ”์ด์Šค ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ์•„์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด ๋•Œ๋Š” UIScreen์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

    2. UIScreen ์‚ฌ์šฉํ•˜๊ธฐ

    import SwiftUI
    
    struct ContentView: View {
    
        var body: some View {
            GeometryReader { geometry in
                ZStack {
                    Color
                        .yellow
                        .frame(
                            width: UIScreen.main.bounds.size.width,
                            height: UIScreen.main.bounds.size.height
                        )
                    
                    VStack {
                        Text("Width \(UIScreen.main.bounds.size.width)")
                        Text("Height \(UIScreen.main.bounds.size.height)")
                    }
                }
            }
        }
    }
    
    struct ContenttView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }

     

     

     

    ๊ทธ๋Ÿผ ์–ด๋–ค ์ƒํ™ฉ์—์„œ GeometryReader๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์–ด๋–ค ์ƒํ™ฉ์—์„œ UIScreen์„ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ?

    import SwiftUI
    
    struct ContentView: View {
    
        var body: some View {
            VStack {
                VStack {
                    GeometryReader {geometry in
                        VStack (alignment: .leading){
                            Text("View 1").bold()
                            Text("Screen Width: \(geometry.size.width)")
                            Text("Screen Height: \(geometry.size.height)")
                        }
                        .padding()
                        .background(Color.green)
                        .foregroundColor(Color.white)
                    }
                }
                
                VStack {
                    GeometryReader {geometry in
                        VStack (alignment: .leading){
                            Text("View 2").bold()
                            Text("Screen Width: \(geometry.size.width)")
                            Text("Screen Height: \(geometry.size.height)")
                        }
                        .padding()
                        .background(Color.red)
                        .foregroundColor(Color.white)
                    }
                }
                .frame(width: 250, height: 250)
                
                VStack {
                    let screenSize = UIScreen.main.bounds.size
                    GeometryReader {geometry in
                        VStack (alignment: .leading){
                            Text("Screen Size").bold()
                            Text("Screen Width: \(screenSize.width)")
                            Text("Screen Height: \(screenSize.height)")
                        }
                        .padding()
                        .background(Color.red)
                        .foregroundColor(Color.white)
                    }
                }
                .frame(width: 250, height: 250)
            }
        }
    }
    
    struct ContenttView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }

    View1์—์„œ๋Š” GeometryReader๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์œ„ ๋ทฐ์—์„œ ์ œ๊ณต๋œ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ–ˆ๋‹ค.

    View2์—์„œ๋„ GeometryReader๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ์ƒ์œ„ ๋ทฐ์˜ ํฌ๊ธฐ๋Š” ํ”„๋ ˆ์ž„์— ์˜ํ•ด ๊ณ ์ •๋œ๋‹ค. ๊ทธ๋ž˜์„œ Width์™€ Height๊ฐ€ 250์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    View1, View2 ๋ชจ๋‘ GeometryReader๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

     

    ํ•˜์ง€๋งŒ UIScreen.main.bounds๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํ”„๋ ˆ์ž„ ๊ฐ’์„ ์ค˜๋„ Screen Width, Height๊ฐ€ ์ผ์ •ํ•˜๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๊ฒƒ์„ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.