2013-04-01 29 views
8

Ứng dụng chứa UITableView chứa UITableViewCell tùy chỉnh. Tế bào lần lượt chứa một UIImageView.Tại sao UIImageView được đổi kích thước khi gán hình ảnh mới trong iOS 6?

Vấn đề là thiết lập các hình ảnh trong cellForRowAtIndexPath làm cho hình ảnh mất toàn bộ khu vực UITableViewCell:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"bigrect" ofType:@"png"]; 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:path]; 

    cell.imageView.image = image; 

    return cell; 
} 

enter image description here

Trong IB, 'Aspect Fit' đã được chọn là chế độ, nhưng thay đổi trường này không có ảnh hưởng rõ ràng đến kết quả.

Tuy nhiên, khi hình ảnh được đặt từ IB, không có cuộc gọi đến cell.imageView.image = image trong mã của tôi, kết quả chính xác là những gì tôi muốn xem. Những hình ảnh chỉ nằm trong giới hạn tôi đã xác định cho UIImageView trong IB và không cố gắng mở rộng để phù hợp với toàn bộ chiều cao thẳng đứng của UITableViewCell:

enter image description here

hình ảnh tôi đang sử dụng là 1307x309 pixel, trong trường hợp đó là quan trọng. Các thử nghiệm đã được chạy trên trình mô phỏng iOS 6.1.

Tôi nhận thấy điều này từ UIIMageView Documentation:

Trong iOS 6 và sau đó, nếu bạn gán giá trị cho tài sản restorationIdentifier của quan điểm này, nó cố gắng để bảo vệ khung của hình ảnh hiển thị. Cụ thể, lớp bảo tồn các giá trị của các giới hạn, thuộc tính trung tâm và biến đổi của khung nhìn và thuộc tính anchorPoint của lớp cơ bản. Trong quá trình khôi phục, chế độ xem hình ảnh sẽ khôi phục các giá trị này để hình ảnh xuất hiện chính xác như trước đây. Để biết thêm thông tin về cách bảo tồn và khôi phục trạng thái hoạt động, hãy xem Hướng dẫn lập trình ứng dụng iOS.

Tuy nhiên, không có gì ở đây hoặc ở nơi khác trong tài liệu tôi có thể tìm được giải quyết vấn đề. Thêm "ID khôi phục" của "Foo" vào UIImageView trong IB dưới 'Identity' không thay đổi hành vi. Bỏ chọn 'Sử dụng Autolayout' cũng không thay đổi hành vi.

Làm cách nào để ngăn iOS thay đổi kích thước UIImageView trong UITableViewCell khi đặt hình ảnh?

+0

tại sao không đặt đúng khung hình ảnh sau khi gán thuộc tính hình ảnh của nó? –

+0

@PatrickGoley, đó có thể là phương sách cuối cùng mà tôi cho là. Tôi thực sự không phải đối phó với bố trí bằng tay mặc dù. –

Trả lời

6

Nó chỉ ra rằng UITableViewCell dường như đã có một tài sản được gọi là "imageView" bao gồm toàn bộ nền của ô. Thiết lập thuộc tính hình ảnh của đối tượng ImageView này đặt nền hình ảnh, không phải là hình ảnh tôi đã quan tâm đến

Thay đổi phương pháp của tôi như sau khi đảm bảo rằng CustomCell có một "myImageView" Tài sản cố định vấn đề:.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"bigrect" ofType:@"png"]; 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:path]; 

    cell.myImageView.image = image; 

    return cell; 
} 

This SO answer cho một câu hỏi hơi khác đã chỉ cho tôi đúng hướng.

+2

Cảm ơn rất nhiều! Tôi đã phạm sai lầm tương tự, không nhận ra và sửa lỗi hàng giờ! Vì vậy, nhấn mạnh ra, nhưng may mắn để tìm câu trả lời của bạn! – Zennichimaro

+0

đó là lý do tại sao tôi luôn thêm 'my' trước bất kỳ từ khóa nào .. –

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