iOS

[iOS] WKWebView로 웹뷰 만들기

guswlsdk 2025. 3. 11. 09:53
반응형

 

WKWebView

  • 앱과 상호 작용이 가능한 웹 컨텐츠를 보여줄 수 있도록하는 객체
  • HTML, CSS, JavaScript와 같은 컨텐츠를 앱의 네이티브 뷰와 함께 보여줄 수 있도록 제공한다.
  • 웹 기술이 네이티브 뷰보다 앱의 레이아웃 및 스타일 요구사항을 더 쉽게 충족할 수 있을 때 사용한다.
    • 앱의 콘텐츠가 자주 바뀔 때 사용할 수 있다.
    • 단순 일회성 또는 주기적으로 바뀌는 뷰, 이벤트 팝업 등이 예시가 될 수 있을 것 같다.
    • URL을 정적으로 작성 되어 있는 것이 아닌 API 호출로 URL을 입력할 수 있다면 웹 뷰가 변경 될 때마다 앱을 배포하지 않아도 될 것 같다. (웹뷰 안 써봐서 모름...)

 

WKWebView 이전에는 iOS 2.0부터 사용 가능한 UIWebView를 사용하였지만 iOS 8.0부터는 WKWebView를 사용한다.

 

 

https://developer.apple.com/documentation/webkit/wkwebview에 작성된 코드이다.

class ViewController: UIViewController, WKUIDelegate {
    
    var webView: WKWebView!
    
    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        
        let myURL = URL(string:"https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }
}

 

 

 

스와이프 하여 뒤로가기 기능은 기본적으로 지원하지 않아 웹 내에서 뒤로가기 기능이 구현되어 있지 않다면 아래 코드와 같이 사용할 수 있다.

 private lazy var webView: WKWebView = {
    let webConfiguration = WKWebViewConfiguration()
    let webView = WKWebView(frame: .zero, configuration: webConfiguration)

    webView.allowsBackForwardNavigationGestures = true // 추가, 스와이프로 뒤로가기 허용
    return webView
}()

 

 

뒤로가기 스와이프... UINavigationController과 동시에 사용하면 어떻게 될까?

두 개의 제스처가 동시에 요청을 받고 있어서 둘 중 하나만 동작하거나 둘 다 인식 못 할 것 같다는 생각이 들었다. 

자세히 기억은 안 나지만 과거 두 개의 제스처를 기다리는 상황에서 모두 동작하지 않았던 버그를 마주친 경험이 있었다...

 

호기심에 해 봤다.

 

먼저 웹 뷰 초기화면에서 뒤로가기 스와이프를 시도한 상황이다.

 

 

 


UINavigationController의 스와이프로 인식하여 페이지가 이동한다.

 

 

 

다음은 웹 뷰에서 페이지를 이동시킨 다음 뒤로가기 스와이프를 시도한 상황이다.

 

 


웹 뷰의 페이지가 뒤로가기 된 후 웹 뷰 초기화면까지 복귀했을 때 Navigation의 스와이프가 동작한다.

 

웹 뷰의 Navigation Stack이 존재할 경우에 웹 뷰의 스와이프가 동작하고 존재하지 않을 때 Navigation이 동작하는 것 같다.

 

 

 

 

 

WKWebView VS SFSafariViewController

간단히 웹 페이지를 보여주기 용도로만 사용할 경우에는 SFSafariViewController를 사용하는게 더 좋은 것 같다.

페이지 이동 버튼(앞, 뒤), 확장 프로그램, 보안, 읽기 전용 주소 필드, 완료 버튼 등 Safari에서 기본으로 제공하는 기능이 많이 때문이다.

 

WKWebView는 웹과 앱이 상호작용이 가능하다는 강력한 기능이 있지만 SFSafariViewController에 기본적으로 제공되는 모든 기능을 직접 구현해야 한다는 점이 있기 때문에 큰 차이점을 갖는다.

 

 

https://developer.apple.com/documentation/webkit/wkwebview

 

WKWebView | Apple Developer Documentation

An object that displays interactive web content, such as for an in-app browser.

developer.apple.com

 

반응형