2010-10-27 10 views
10

Vì một số lý do, tôi không thể có UIWebView để "phát đẹp" với hình ảnh Retina mới của tôi. Vấn đề, từng bước:Sử dụng hình ảnh Retina trong UIWebView cục bộ

Tôi đang tải một loạt tệp trợ giúp HTML ra khỏi nhóm. Mã của tôi tải các tệp HTML khác nhau nếu đó là một chiếc iPhone 4 (LWERetinaUtils bên dưới là một lớp util mà tôi đã viết). Tôi đã đọc in this question rằng không thể cho UIWebView tự động phát hiện chỉ báo @ 2x - và trải nghiệm cá nhân đó, do đó cách tiếp cận này.

if ([LWERetinaUtils isRetinaDisplay]) 
    htmls = [NSArray arrayWithObjects:@"[email protected]",@"[email protected]",nil]; 
else 
    htmls = [NSArray arrayWithObjects:@"foo.html",@"bar.html",nil]; 

Sự khác biệt duy nhất giữa nội dung của [email protected]foo.html là các thẻ hình ảnh tham khảo các hình ảnh có độ phân giải cao hơn.

Sau đó, tôi tải UIWebView của tôi như thế này:

_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 375.0f)]; 
    _webView.delegate = self; 
    [self _loadPageWithBundleFilename:self.filename]; 
    [self.view addSubview:_webView]; 

_loadPageWithBundleFilename: chỉ là một phương pháp helper tôi đã viết để nói với UIWebView để tải nội dung từ các tập tin.

Cho đến nay rất tốt, nội dung của tôi đang tải khác nhau giữa Trình mô phỏng iPhone và Trình mô phỏng iPhone 4 - chứ không phải cách tôi mong đợi.

Văn bản hiển thị chính xác cùng kích thước - nhưng hình ảnh võng mạc dường như được thu nhỏ (trông có vẻ pixelated) và chúng bay ra khỏi đầu bên phải của màn hình.

Tôi đã cố gắng:

_webView.scalesPageToFit = YES 

bất động sản, và chắc chắn đủ, nó làm cho những hình ảnh xuất hiện một cách thích hợp (ít nhất là không bị hiện tượng pixel). Nhưng, sau đó văn bản của tôi là nhỏ (như tôi đã được khá xa thu nhỏ bằng cách xem web).

Có ai biết cách giải quyết vấn đề này không? Tôi đã thấy một vài giải pháp Javascript (like this), nhưng chúng dường như chỉ là "trao đổi hình ảnh", đó là những gì tôi đã làm ở trên - vì vậy nó sẽ hoạt động, không ??

Cuối cùng, trong các tập tin HTML, đây là cách tôi đề cập đến những hình ảnh:

<img src="[email protected]" border="0" title="Welcome!" class="title"/> 

Và CSS:

body{ margin:20pt; padding:10pt; line-height:38pt; font-size:24pt; text-align:left; background-color: transparent; font-family:Helvetica,sanserif; width:640pt;} 

tôi đặt thẻ rộng trong CSS - nó dường như không thay đổi gì cả.

+0

Nó sẽ giúp thấy một đoạn mã HTML của bạn. Cách bạn thiết lập UIWebView không quan trọng đối với việc chia tỷ lệ hình ảnh. Đó là tất cả trong HTML/CSS/JS. – Mike

+0

Mike, được thêm vào theo yêu cầu của bạn- – makdad

+0

Có lẽ câu trả lời của tôi cho một câu hỏi tương tự là thú vị http://stackoverflow.com/questions/3724058/uiwebview-and-iphone-4-retina-display/7741453#7741453. Nó sử dụng Javascript để tải hình ảnh thu nhỏ và thiết lập chiều rộng đúng và đường nối làm việc tốt với hình ảnh địa phương ít nhất. –

Trả lời

11

Đảm bảo bạn đang chỉ định chiều cao và chiều rộng trên các thẻ <img> của mình. Bạn chắc chắn cần ít nhất chiều rộng để thực hiện công việc này.

+0

Mike - Tôi nghĩ rằng tôi có thể đã thấy điều đó. Bạn nói đúng, tôi hiện không làm điều đó. Câu hỏi hai - đối với hình ảnh Retina, tôi có chỉ định chiều rộng pixel "thực" hoặc chiều rộng pixel "nhận thức" không? Tôi sẽ cho một shot. – makdad

+5

Điều này đã hiệu quả. Để trả lời cho câu hỏi của riêng tôi (và không ai khác viết về điều này vì vậy tôi hy vọng tôi có thể giúp người khác): Thuộc tính WIDTH trên thẻ IMAGE phải được đặt thành chiều rộng hình ảnh ORIGINAL (không có độ nét cao). – makdad

+0

Câu trả lời này hoạt động đủ tốt cho hình ảnh nội tuyến chuẩn, nhưng về Hình nền CSS thì sao? Những người dường như không hoạt động đúng cách, và nó không phải dễ dàng như vậy để thiết lập chiều rộng và chiều cao của họ. Có suy nghĩ gì không? – Axeva

6

Nếu bạn không quan tâm về việc cho phép WebKit xử lý thay đổi kích thước (thu hẹp) các hình ảnh trên dân số suy giảm của thiết bị không phải võng mạc, bạn chỉ có thể làm điều này:

  1. Chỉ cần cung cấp hình ảnh @ 2x.
  2. Chỉ định kích thước hình ảnh danh nghĩa (không có độ nét cao) trong thẻ IMG của bạn hoặc với thuộc tính kích thước nền CSS3.