2014-09-24 18 views
9

Đây là kịch bản của tôiiOS 8 Hôm nay sự liên kết phụ tùng vấn đề

enter image description here

Tôi đang sử dụng autolayout, và không sử dụng các lớp học kích thước.

Khi tôi chạy nó trên iPhone 5s, nó hoạt động tốt. (Cả dọc và ngang) enter image description here

Nhưng khi tôi chạy nó trên iPhone 6 cộng (chân dung), nó không sắp xếp đúng cách. enter image description here

trên iPhone 6 cộng (phong cảnh), điều này còn tệ hơn. enter image description here

Tôi biết tôi có thể sử dụng -widgetMarginInsetsForProposedMarginInsets: để đặt lề, nhưng trong trường hợp đó, tôi sẽ cần phải tùy chỉnh lề cho mọi thiết bị. Đó sẽ là khủng khiếp :(

Vậy là có một cách để align subview đến danh hiệu ít đau đớn

+0

Bạn đang sử dụng bố cục tự động? Nếu vậy, chỉ cần đặt một ràng buộc với lề container. –

+0

Nhưng lợi nhuận là gì, nó khác nhau trên các thiết bị/định hướng khác nhau – Keoros

+0

Tôi nghĩ rằng hệ thống đặt lề chính xác cho mỗi thiết bị –

Trả lời

5

Có vẻ như bạn phải đặt thủ công. Bạn có thể làm điều này bằng cách tạo một ràng buộc, sau đó chỉ định IBOutlet cho nó, và thiết lập hằng số tùy thuộc vào thiết bị/hướng.

Để tham khảo, đây là những lề tôi thấy bạn cần:

  • 5S - 1 (2px)
  • 6-1 (2px)
  • 6 cộng với bức chân dung - 5 (15px)
  • 6 cộng với cảnh quan - 34 (102px)

bạn có thể tìm thấy cái nào bạn cần từ kích thước của cái nhìn mở rộng, đó là 414 pt cho một iPhone chân dung 6.

+0

về phong cảnh và chân dung của iPad? – Erich

9

Đặt khoảng cách cạnh về 0 sẽ khắc phục sự cố:

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
{ 
    return UIEdgeInsetsZero; 
} 
+0

Trên iOS 9 nó hoàn toàn loại bỏ các insets và trông thậm chí tệ hơn. –

+0

Cảm ơn bạn ~ Nó giúp ích rất nhiều. Hoạt động tốt trên iOS 9.1 –

0

Sửa một số thiết bị. Yêu cầu Ericas UIDevice-Extension.

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
{ 
    defaultMarginInsets.bottom = 0; 

    if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) { 
     defaultMarginInsets.left += 5; 
    } else if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { 
     defaultMarginInsets.left += 34; 
    } else { 
     defaultMarginInsets.left += 1; 
    } 

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