uiwebview는 회전 후 텍스트를 크기로 바꿉니다 : 마법의 버그 또는 어리 석음에 대한 설명을 찾고 있습니다.

StackOverflow https://stackoverflow.com/questions/1619802

문제

그래서 응용 프로그램에 uiwebview가 있고 HTML (기사)을로드하고 모든 CSS를 넣어 모든 것을 더 좋게 만듭니다. 그것은 간단하고 명확하며 조경 기능에 읽기를 추가하려고 할 때까지 모든 것이 완벽합니다. 그런 다음 Uiwebview는 HTML에 넣은 CSS "Font-Size"를 무시하고 조경 모드로 회전 한 후 글꼴 크기를 크게 증가 시킨다는 것을 알았습니다.

나는 약 4-5 시간을 보냈다 (나는 iPhone 응용 프로그램을 프로그래밍하는 것을 처음 접했지만 무언가를 올바르게 만들 때 매우 고집이있다). 많은 구성 옵션을 시도했습니다.

그리고 오늘 밤 마법 같은 일이 일어났습니다. 소스를보십시오.

버그가있는 풍경 :

r = CGRectMake(0.0, 0.0, 480.0, 320.0);
[adView.view removeFromSuperview];
if (!isFullScreen) {
    minus = 50 + minus;
    [controlsView setFrame:CGRectMake(0, r.size.height - 50, r.size.width, 50)];        
} else {
    minus = 20; 
}

[textView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)];  
[scrollView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)];

조경 고정 (글꼴 크기가 더 이상 변하지 않음) :

r = CGRectMake(0.0, 0.0, 480.0, 320.0);
[adView.view removeFromSuperview];
if (!isFullScreen) {
    minus = 50 + minus;
    [controlsView setFrame:CGRectMake(0, r.size.height - 50, r.size.width, 50)];        
} else {
    minus = 20; 
}
[textView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)];  
[scrollView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)];

if (!isFullScreen) {
    minus = 1 + minus;
} else {
    minus = 20+1;   
}
[textView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)];  
[scrollView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)];

보시다시피 동일한 코드 만 한 번만 추가하고 마진 (마이너스)을 한 지점으로 추가했습니다. 그리고 SetFrame을 다시 수행했습니다 (아니요, 한 세트의 세트로만 크기 조정을 수정하지 않습니다).

나는 그것이 효과가 있지만, 어떻게 그리고 왜 그런지 알고 싶습니다. 그래서 나는 "올바른 방법"을 할 수 있습니다. 이제 코드는 어리석은 것처럼 보이고 응용 프로그램 맨 아래에 1 점 heigh 마진을 가지고 있기 때문입니다.

그리고 왜 내가 같은 코드를 다시 붙여 넣으려고했는지 묻지 마세요 ..

도움이 되었습니까?

해결책 2

그리고 마법의 해결책은 다음과 같습니다.

<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0;'>

내가 이번 주 전만 알고 있다면 .. 너무 많은 시간이 너무 많은 신경이 사라졌습니다 ..

다른 팁

그만큼 사파리 웹 컨텐츠 가이드 또한 CSS에서 텍스트의 자동화를 비활성화하는 방법을 언급하여 제 경우에는 문제가 해결되었습니다.

html {
    -webkit-text-size-adjust: none; /* Never autoresize text */
}

처음 두 가지 답변을 사용하여 CSS 속성 :

html {
    -webkit-text-size-adjust: none; /* Never autoresize text */
}

그리고 메타 태그 :

<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0;'>

이 JavaScript 코드를 사용하여 기존 웹 사이트에 둘 다 주입 할 수있었습니다.

var style = document.createElement(\"style\"); 
document.head.appendChild(style); 
style.innerHTML = "html{-webkit-text-size-adjust: none;}";
var viewPortTag=document.createElement('meta');
viewPortTag.id="viewport";
viewPortTag.name = "viewport";
viewPortTag.content = "width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;";
document.getElementsByTagName('head')[0].appendChild(viewPortTag);

UIWebViewDelegate의 webViewDidFinishload 사용 :

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

    NSString *javascript = @"var style = document.createElement(\"style\"); document.head.appendChild(style); style.innerHTML = \"html{-webkit-text-size-adjust: none;}\";var viewPortTag=document.createElement('meta');viewPortTag.id=\"viewport\";viewPortTag.name = \"viewport\";viewPortTag.content = \"width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;\";document.getElementsByTagName('head')[0].appendChild(viewPortTag);";
    [webView stringByEvaluatingJavaScriptFromString:javascript];

}

당신은 아마 이것을 읽어야 할 것입니다

https://developer.apple.com/library/content/documentation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html

마찬가지로 뷰포트 너비 만 지정하면 높이와 초기 스케일이 추론됩니다. 그림 3-15는 뷰포트 너비가 320으로 설정 될 때 동일한 웹 페이지의 렌더링을 보여줍니다. 초상화 방향이 그림 3-14와 동일하게 렌더링되지만 조경 방향은 320 픽셀의 너비를 유지합니다. 초기 척도를 변경하고 사용자가 조경 방향으로 변경할 때 확대 / 축소의 영향을 미칩니다.

나는 당신의 사건을 시도했지만 운이 없습니다.

Soluion은 나를 위해 일했습니다.

WebView Reload];

요소를 추가하여 해결할 다른 방법이 있습니다.

<table>
<tr>
<td>
  [your html content]
</td>
</tr>
</table>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top