2015-01-23 16 views
5

Tôi tải xuống dữ liệu từ web, bao gồm văn bản và hình ảnh. Tôi đang đưa dữ liệu này vào UITableView, và tôi muốn hình ảnh là một nền tảng của UITableViewCell. Tất cả các hình ảnh có cùng độ phân giải 620x350.Cách đặt chiều cao UITableViewCell tùy thuộc vào kích thước màn hình

Tất cả các iPhone có kích thước màn hình khác nhau vì vậy tôi cần phải mở rộng chiều rộng và chiều cao của hình ảnh tùy thuộc vào kích thước màn hình và cũng có thể thực hiện điều này với UITableViewCell.

Giải pháp tốt nhất là gì?

Cảm ơn bạn.

+1

Tại sao? Điểm của màn hình lớn hơn là có thể hiển thị thêm thông tin trên màn hình. Từ những gì bạn mô tả, tại sao bận tâm hỗ trợ các màn hình lớn hơn nếu bạn chỉ hiển thị cùng một lượng thông tin, chỉ lớn hơn? – rmaddy

+1

Tôi không biết cách đổi kích thước hình ảnh giữ cùng tỷ lệ khung hình. Đó thực sự là câu hỏi của tôi. – igrrik

Trả lời

2

Đơn giản chỉ cần sử dụng - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    CGFloat aspectRatio = 350.0f/620.0f; 
    return aspectRatio * [UIScreen mainScreen].bounds.size.width;// assuming that the image will stretch across the width of the screen 
} 
+0

Cảm ơn bạn đã trả lời.Vì vậy, nếu tôi hiểu bạn, điều này sẽ cho tôi chiều cao mới của hình ảnh tùy thuộc vào kích thước màn hình, phải không? Nhưng tôi không chắc phải đặt nó ở đâu, để đặt chiều cao của ô. – igrrik

+0

Phần khó khăn là những hạn chế. Mã này chưa đủ. Sau đó, trong 1 dòng bạn có 3 lỗi: con trỏ cho một nguyên thủy; int phân chia cho một phao; không có dấu phẩy ở cuối. –

+0

Tôi rất tiếc vì đã cố gắng trợ giúp từ điện thoại của mình. Những điều này xảy ra ... – Bennie

-1

Bạn có thể sử dụng phương pháp -tableView:heightForRowAtIndexPath: trong HTTableViewDelegate để trả về chiều cao cho mỗi ô. Trong trường hợp của bạn, bạn sẽ muốn một cái gì đó như thế này:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    return [UIScreen mainScreen].bounds.size.height; 
} 
+0

Vì vậy, điều này sẽ cho độ phân giải của màn hình phải không? Và sau đó tôi phải làm cho smh như tuyên bố chuyển đổi trường hợp, nơi tôi thiết lập chiều rộng và chiều cao của ô? – igrrik

+0

nó không hoạt động bình thường mà không bị ràng buộc cho hình ảnh. Hơn nữa, nó chỉ trả về tất cả các ô với chiều cao của màn hình. –

+0

Ông không hỏi làm thế nào để phù hợp với hình ảnh vào tế bào. Ông hỏi làm thế nào để thiết lập chiều cao tế bào đến chiều cao màn hình. Định cỡ hình ảnh với kích thước ô là phần dễ dàng. – AdamPro13

3

giải pháp tốt nhất và sạch sẽ, nó chỉ là chơi với chiều cao của các tế bào, cho phép các hình ảnh được tự động thay đổi kích thước bởi Autolayout.

Nó rất dễ dàng:

  1. Trong di động của bạn, thêm một UIImageView và thiết lập kích thước bạn muốn có khi tế bào có chiều cao thực tế;

  2. Đặt làm hạn chế của UIImageView này, ít nhất trên cùng, dưới cùng và một trong các đường biên bên (phải hoặc trái); cũng đặt các ràng buộc để giữ tỷ lệ/chiều cao tỷ lệ/chiều cao;

Tại thời điểm này, khi các tế bào phát triển, hình ảnh phát triển về chiều cao, và để giữ cho tỷ lệ (nhờ hạn chế) nó là thay đổi kích cỡ chiều rộng là tốt, có LUÔN đúng và kích thước tương ứng.

Vậy bây giờ, bạn có chỉ để viết mã cho chiều cao của tế bào:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static CGFloat cellDefaultHeight = /*the default height of the cell*/; 
    static CGFloat screenDefaultHeight = /*the default height of the screen i.e. 480 in iPhone 4*/; 

    CGFloat factor = cellDefaultHeight/screenDefaultHeight 

    return factor * [UIScreen mainScreen].bounds.size.height; 
} 

Rõ ràng, thiết lập các contentMode của UIImageView-AspectFill.

+0

Cảm ơn bạn, câu trả lời của bạn có vẻ là câu trả lời đúng. Nhưng trước khi tôi bắt đầu thử nó, chỉ có một câu hỏi. Theo mặc định, kích thước nào tôi nên sử dụng trong bảng phân cảnh? kịch bản của tôi là 600x600 chuẩn, tôi tính toán kích thước của hình ảnh cho mỗi màn hình và tôi có 320x180 cho màn hình 3,5/4 inch 375x211 4,7 inch 414x233 cho 5,5 inch Rõ ràng chiều rộng là chiều rộng tối đa của màn hình và chiều cao được tính với tỷ lệ co là 1,77. Tôi nên sử dụng loại nào trong số này? Và tôi có cần đặt UIImageView không? Tại sao không sử dụng nền của ô? – igrrik

+0

chiều cao của ô mặc định cho màn hình có chiều rộng 320px là thứ bạn có thể quyết định. Cũng như đặt hoặc không phải là hình ảnh làm nền, nhưng trong trường hợp đó bạn có vấn đề tỷ lệ khi màn hình cao hơn và chiều rộng là như nhau (tức là iPhone 5). Hình ảnh sẽ được lặp lại. –

+0

Có. Cảm ơn bạn. Nó gần như hoạt động, ngoại trừ một vấn đề. Nhìn vào các ảnh chụp màn hình. Trong chế độ xem chính, hình ảnh bị cắt và sẽ xảy ra với tất cả các thiết bị. https://www.dropbox.com/s/evuse7mqi3q7tsc/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA% D1% 80% D0% B0% D0% BD% D0% B0% 202015-01-24% 20% D0% B2% 202.58.17.png? Dl = 0 https://www.dropbox.com/s/ m0rssbq83dau4pd /% D0% A1% D0% BD% D0% B8%% D0% BC% D0% BỊ% D0% BA% 20% D1% 8D% D0% BA% D1% 80% D0% B0% D0% BD% D0 % B0% 202015-01-24% 20% D0% B2% 202.58.38.png? Dl = 0 – igrrik

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