2009-10-25 13 views
36

vì vậy tôi có UIWebView trong ứng dụng của mình và tôi tải một số html (bài viết) vào nó, đặt một số CSS để làm mọi thứ đẹp hơn. Điều đó đơn giản và rõ ràng và mọi thứ đều hoàn hảo cho đến khi tôi cố gắng thêm vào chức năng cảnh quan và sau đó tôi nhận thấy UIWebView bỏ qua bất kỳ "cỡ chữ" css nào tôi đã đặt trong HTML và tăng kích thước phông chữ mạnh sau khi quay sang chế độ ngang.UIWebView thay đổi kích thước văn bản sau khi xoay: tìm kiếm lời giải thích cho lỗi ma thuật hoặc ngu ngốc của tôi

Tôi đã dành khoảng 4-5 giờ (tôi mới sử dụng ứng dụng lập trình Iphone, nhưng tôi khá bướng bỉnh khi nói đến việc làm điều gì đó đúng) cố gắng khắc phục. Đã thử nhiều và rất nhiều tùy chọn cấu hình - NOTHING.

Và tối nay điều gì đó huyền diệu đã xảy ra. Chỉ cần nhìn vào nguồn:

Cảnh với The Bug:

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)]; 

Cảnh cố định (font size không thay đổi nữa):

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)]; 

Như bạn có thể thấy tôi chỉ thêm cùng một mã một lần nữa và tăng biên độ (trừ) một điểm. Và đã setFrame một lần nữa (không, nó không sửa đổi kích thước chỉ với một bộ setFrames).

Tôi vui vì nó hoạt động, nhưng tôi muốn biết LÀM THẾ NÀO VÀ TẠI SAO, vì vậy tôi có thể làm điều đó "đúng cách", bởi vì bây giờ mã trông ngu ngốc và có 1 điểm lề cao ở dưới cùng của ứng dụng.

Và đừng hỏi tại sao tôi đã cố gắng để sao chép dán đoạn mã tương tự một lần nữa ..

+0

2016 giải pháp: http://stackoverflow.com/a/2711132/294884 – Fattie

Trả lời

27

Và giải pháp huyền diệu là:

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

Nếu duy nhất mà tôi biết trong tuần này trước .. Vì vậy, nhiều thời gian, rất nhiều dây thần kinh đã bị mất ..

+14

Điều này không hiệu quả đối với tôi, nhưng điều chỉnh kích thước trên -webkit-text-size: none; CSS đã làm. Chỉ FYI – kdbdallas

+0

Việc này đã giải quyết được vấn đề của tôi. Chỉ cần nối thêm html sau thẻ đó và khung nhìn được thay đổi kích cỡ như mong đợi. – respectTheCode

+0

hi @sniurkst! bạn có thể thay đổi câu trả lời được chấp nhận cho câu trả lời chính xác (7 năm sau!) bên dưới không? chúc mừng – Fattie

5

Bạn có thể chỉ cần đọc

http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/UsingtheViewport/UsingtheViewport.html

Tương tự như vậy, nếu bạn chỉ định chỉ có chiều rộng khung nhìn của khung nhìn , chiều cao và ban đầu là được suy ra. Hình 3-15 hiển thị hiển thị cùng một trang web khi chiều rộng khung nhìn được đặt thành 320. Lưu ý rằng hướng dọc được hiển thị giống như trong Hình 3-14, nhưng hướng ngangduy trì độ rộng của 320 pixel, trong đó thay đổi thang đo ban đầu và có hiệu ứng phóng to khi người dùng thay đổi thành hướng ngang.

+0

bạn có thể giải thích làm thế nào tôi có thể tránh điều này trong hoàn cảnh của tôi? Nhân tiện, tôi không tải trang bên ngoài, tôi đang tạo html khi đang bay và sau đó tải nó lên webview của tôi. – sniurkst

+0

Cảm ơn, tôi đã khắc phục sự cố của tôi và bạn đưa tôi vào đúng cách. – sniurkst

2

tôi đã cố gắng trường hợp của bạn nhưng không có may mắn.

Giải pháp làm việc cho tôi là:

[webView reload];

108

Safari Web Content Guide cũng đề cập đến cách vô hiệu hóa tự động hóa văn bản trong CSS, giải quyết được sự cố trong trường hợp của tôi.

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

Nó hoạt động cho tôi cũng như – user366584

+0

Sửa chữa tuyệt vời. Đã làm cho tôi. :) – Sam

+0

Đúng là một. –

13

Sử dụng hai câu trả lời đầu tiên, CSS tài sản:

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

và thẻ meta:

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

tôi đã có thể tiêm cả hai vào một trang web hiện có, sử dụng javascript này mã:

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); 

Sử dụng webViewDidFinishLoad từ UIWebViewDelegate:

- (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]; 

} 
Các vấn đề liên quan