webView 를 얹이고 그 안에 페이지를 띄웠는데 중앙으로 제대로 배치가 안되는 문제가 발생..

(폰 용 페이지를 패드에서도 보는 거라 html 로 만든 테이블뷰가 가운데로 와야 정상임)


난 처음에 뷰 프레임이나 autoresizemask 가 제대로 안잡힌 건줄 알았는데 그게 아니더라..


원인은 meta 태그의 viewport 항목.


width=device-width 이렇게 넘겨주는데 말그대로 device width 다 보니

웹뷰의 크기와는 상관없이 기기의 너비가 반환되어서 들어감.


따라서 사파리라 던가 풀스크린 웹뷰의 경우에는 상관없지만 내가 한것 처럼 화면의 일부분에만 웹뷰를 띄우고

사용할 시에는 전체 너비를 제대로 못 받아 오는 문제가 생겼다.


해결법은 의외로 간단.


webview 의 delegate 지정 후 delegate 에서


- (void)webViewDidFinishLoad:(UIWebView *)webView {

    [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.querySelector('meta[name=viewport]').setAttribute('content', 'width=%d;', false); ", (int)webView.frame.size.width]];

}


이렇게 해주면 된다.

기기의 화면이 회전되는 등 너비 값이 변하였을때도 바로바로 잘 적용됨.

  1. 2013.04.10 10:06

    비밀댓글입니다

    • BlogIcon iolate 2013.04.10 22:38 신고

      저 코드 자체가 완료된 시점에서 viewport 값을 바꿔주는 거라서 어쩔수 없습니다.

      html 로딩중에 실시간으로 체크할수 있는게 있는지 찾아보시고(없을것 같지만.)
      아니면 로딩이 완료되고 나면 웹뷰를 보이게 하는것도 한 방법이겠지요.

      처음 띄울때 웹뷰를 숨기거나 안보이게 했다가 위 코드에서 다시 보이게 해주면 됩니다.

  2. BlogIcon 박영민 2015.05.21 18:47

    오늘 이문제때문에 고민하다가 덕분에 해결했습니다. 윗분의 질문은 모르겠으나, 아마도 다 로딩하기전에 스크롤 되는 문제 떄문에 그런것이라면 커버뷰를 만드는것도 좋을듯합니다. 보이지 않는 뷰를 띄워서 DidFinish 될때 HIDE 시키면 될것같습니다. 감사합니다.

  3. 김성태 2015.07.02 13:23

    감사합니다!

  4. 이승준 2016.02.03 18:00

    정말 감사합니다.
    몇일째 고생했는데 한번에 풀렸네요 ㅠㅜ 사랑합니다..정말..

+ Recent posts