2015-04-10 16 views
12

Tôi đã tình cờ gặp một hành vi lạ, trong đó các ô được thêm vào một số UITableView đôi khi được thụt vào bên trái. Điều này chỉ xảy ra trên iOS 8.3 và tôi không thể tìm thấy mô hình rõ ràng về thời điểm điều này xảy ra.iOS 8.3 - Ô UITableView không căn chỉnh, thụt lề sang bên trái

Bất kỳ ai cũng gặp điều tương tự?

+0

Tôi đang trải nghiệm điều tương tự .. http://stackoverflow.com/questions/29824830/has-anything-changed-with-custom-uitableview-prototype-cells-constraints-since-i – mm24

Trả lời

6

Vâng - đây là kỳ lạ ...

Dường như đôi khi UITableViewCellContentView 's contentView không thẳng hàng với UITableViewCellContentView riêng của mình. Điều này xảy ra khi UITableView là một phần của bố cục rộng hơn màn hình (như trong trường hợp máy nhắn tin ngang).

May mắn thay, giải pháp rất đơn giản: thêm ràng buộc để căn chỉnh contentView với cha mẹ của nó. Điều này chỉ có thể được thực hiện theo chương trình, vì bạn không thể chỉnh sửa các ràng buộc của contentView trong trình soạn thảo bố cục.

- (void)awakeFromNib { 
    // Initialization code 

    // iOS 8.3 bug, where contentView's x position isnt aligned with self's x position... 
    // So we add a constraint to do the obvious... 
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]]; 
} 

này chỉ bắt đầu xảy ra trên iOS 8.3, nhưng việc sửa chữa có vẻ là an toàn và tương thích với các phiên bản trước đó lạc hậu là tốt.

Như mọi khi - vui lòng nhận xét bằng kinh nghiệm của riêng bạn.

+1

Không chắc chắn cách bạn khám phá điều này, nhưng tôi rất biết ơn vì điều đó. Nhiều tế bào bảng của tôi trông kỳ lạ và tôi không biết tại sao. Điều này cố định tất cả chúng. Cảm ơn! –

+0

Chúc mừng tôi có thể cung cấp một số trợ giúp. – Vaiden

+0

Vì vậy, tôi nhận thấy rằng mặc dù điều này dường như đã khắc phục vấn đề này khi tôi đang xây dựng bằng cách sử dụng SDK 8.3 và chạy trên 8.2, khi tôi thực sự nâng cấp iPad lên 8.3, nó vẫn tồn tại. Bất kỳ ý tưởng nào khác? –

3

Có vẻ như đó là vì thuộc tính layoutMargins. Tôi đã bỏ chọn mục thứ hai của mình "Relative to margin" và mọi thứ đều hiệu quả. Đây là số article.

+0

Cảm ơn bạn đã nhập. Tuy nhiên tôi không có hạn chế về lợi nhuận và vấn đề bắt đầu với iOS 8.3. – Vaiden

0

Tôi đã nhìn thấy một biến thể của vấn đề này với một ứng dụng tôi đang làm việc. Chúng tôi đang xem một số ô xem bảng có căn chỉnh hàng đầu/theo dõi không chính xác.

Nó không được kết nối với iOS 8.3, nó chỉ xảy ra khi xây dựng với Xcode 6.3. Tôi có thể thực hiện cùng một dự án và xây dựng nó trên Xcode 6.2 và nó không xảy ra.

Sau khi điều tra, nó chỉ ra rằng điều này chỉ xảy ra trên các ô xem bảng trong xibs.

Giải pháp thay thế là xóa ràng buộc hàng đầu/cuối để lề và đặt chúng trực tiếp vào superview (tức là chế độ xem nội dung ô).

+0

Đây phải là một vấn đề khác. Vấn đề mà tôi (OP) báo cáo đã được trải nghiệm bởi những người dùng đã nâng cấp từ iOS 8.2 lên 8.3, sử dụng phiên bản ứng dụng của chúng tôi được biên dịch và gửi từ XCode 6.2. – Vaiden

13

BảngViewCells của tôi đã thấy tăng lề trái và phải khi chạy trên iOS 8.3 mà tôi không thấy trên các phiên bản trước.

Setting:

self.contentView.preservesSuperviewLayoutMargins = NO; 

cố định vấn đề của tôi và giữ lề của tôi phù hợp trên tất cả các phiên bản, nhưng lưu ý rằng đây chỉ có sẵn trên iOS 8+.

Vì vậy, ở đây, ví dụ, là nơi bạn có thể làm điều này:

- (void)awakeFromNib { 
    if ([self.contentView respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) { 
     self.contentView.preservesSuperviewLayoutMargins = NO; 
    } 
} 
+1

Điều này làm việc hoàn hảo cho tôi. Chỉ cần bọc nó trong một 'if (responsesToSelector)' kiểm tra trong 'awakeFromNib' và nó đã ngừng thụt lề thêm. – Stonz2

+0

Tôi đang trải nghiệm điều tương tự! Bạn có thể cho tôi biết cách khắc phục nếu tôi không sử dụng bảng phân cảnh không? self.tableView = UITableView (khung: CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height), kiểu: UITableViewStyle.Plain) self.tableView! .delegate = tự self.tableView .dataSource = tự self.tableView .registerClass (UITableViewCell.self, forCellReuseIdentifier: "tế bào")! Cảm ơn – webmastx

+0

này giúp với một vấn đề tôi đã có khi thử nghiệm một trục trặc tableView UI trong iOS 11 mà cũng không có trong iOS 10. Cảm ơn! –

0

này cố định cho tôi. Tôi vừa ngừng sử dụng các thuộc tính imageViewtextLabel của UITableViewCell được kết nối lại với các cửa hàng của tôi.

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