2016-01-29 12 views
6

Tôi muốn thoát khỏi một vấn đề điểm ảnh trên device.I tôi đang thiết kế một cuốn lịch mà trông giống như dưới đâyLỗi trong việc làm tròn số giá trị dấu chấm để xem bộ sưu tập

enter image description here

Tôi đang sử dụng một UICollectionViewCell cho mục đích này

- (UIEdgeInsets)collectionView: 
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { 
    return UIEdgeInsetsMake(0,0,0,0); // top, left, bottom, right 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGFloat collectionViewWidth = (CGRectGetWidth(collectionView.frame)/7); 
    CGFloat collectionViewHeight = 48; 
    return CGSizeMake(collectionViewWidth, collectionViewHeight); 
} 

vấn đề là nếu tôi tăng chiều rộng thậm chí bằng 0,0000001 điểm sau đó số lượng tế bào vẽ trên mỗi dòng là 6 thay vì 7. tôi đã cố gắng tăng UIEdgeInset (bằng 0.00001) cũng nhưng đó là cùng phát hành e. Các thuộc tính cho bố cục luồng được thiết lập phù hợp.

layout.minimumInteritemSpacing = 0.0f; 
layout.minimumLineSpacing = 0.0f; 

Làm cách nào để làm cho kích thước ô trở nên nhất quán mà không để khoảng trống? Chiều rộng thực tế của ô là 53.571428571428569 (375/7). Nếu tôi làm tròn giá trị 53,58 sau đó tôi có được cái nhìn dưới enter image description here

Trả lời

4

Đây là một vấn đề rất phổ biến, cách nhanh nhất để giải quyết nó sử dụng collectionViewWidth% 7 == 0 cho kích thước tế bào

Ví dụ collectionViewWidth của bạn == 320. Cell == 320/7 == 45.7142857, U chỉ cần sử dụng collectionViewWidth == 322 và vấn đề của bạn được giải quyết, vì ô == 46

Đó là sự tăng không đáng chú ý collectionViewWidth U có hai tùy chọn

  • Thứ nhất, nếu bạn collectionViewWidth == screenWidth, chỉ cần sắp xếp đến trung tâm và các cạnh sẽ ẩn ra khỏi giới hạn màn hình

  • Thứ hai nếu bạn collectionViewWidth < screenWidth, sử dụng UIView để container cho collectionView, và sử dụng clipTobounds, cạnh sẽ ẩn hết giới hạn vùng chứa.

+0

bạn có một điểm tốt. Tôi biết rằng việc đặt chiều rộng thành% 7 không giải quyết được sự cố. Tôi đang tìm kiếm sự hiểu biết về giải pháp chuyên sâu hơn về cách UIKit giao dịch với các điểm để chuyển đổi pixel và nếu có cách để ghi đè các hành vi đó trong trường hợp xảy ra lỗi dấu chấm động. –

+0

Tôi gặp phải vấn đề tương tự gần đây (https://stackoverflow.com/questions/44380440/ios-uicollectionview-spacing-precision) Trong trường hợp của tôi, chiều rộng của các ô là 103,5, không nên có vấn đề làm tròn, nhưng tôi vẫn kết thúc có các đường thẳng đứng không mong muốn. Có vẻ như cách tốt nhất để giải quyết vấn đề này là có một khoảng nhỏ giữa tất cả các ô, nhưng đó là một sự thỏa hiệp trên giao diện người dùng. – Stephenye

1

Để thoát khỏi một pixel hãy thử sử dụng những phương pháp đại biểu của UICollectionView:

- (CGFloat)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout*)collectionViewLayout 
minimumInteritemSpacingForSectionAtIndex:(NSInteger)section 
{ 
    return -0.5; 
} 

- (CGFloat)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout*)collectionViewLayout 
minimumLineSpacingForSectionAtIndex:(NSInteger)section 
{ 
    return -0.5; 
} 

hoặc, cách khác:

layout.minimumInteritemSpacing = -0.5; 
layout.minimumLineSpacing = -0.5; 

Nó có thể xảy ra mà bạn sẽ phải thiết lập một trong những các số này đến 0.0, trong khi số còn lại là -0.5. Hãy thử chơi với nó.

+0

Nó không hoạt động. Các giá trị -ve bị bỏ qua bởi thuộc tính minimumInteritemSpacingForSectionAtIndex Tôi đã thử một phạm vi có thể có từ -0,1 đến -100 –

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