0

UICollectionViewCell의 내용을 왜곡하지 않고 하나의 축을 따라 크기를 조정하려고합니다.내용을 왜곡하지 않고 하나의 축을 따라 UICollectionViewCell의 크기를 조정하려면 어떻게해야합니까?

UICollectionViewLayoutAttributes layoutAttributesForItemAtIndexPath 및 layoutAttributesForElementsInRect와 관련된 비슷한 문제에 대한 답변을 읽었습니다. 나는 또한 UICollectionViewCell 서브 클래스에서 initWithFrame과 awakeFromNib을 사용해 보았다. UIViewContentMode를 해당 메서드에서 UIViewContentModeScaleAspectFit 또는 UIViewContentModeScaleAspectFill로 설정하려고 시도했지만 효과가 없습니다.

지금까지 하나의 축을 따라 스트레칭을하면 왜곡 된 텍스트가 표시됩니다. 그래서

...

나는 XIB에 정의의 세포와 UICollectionView 있습니다. 현재 셀에는 UILabel 만 있습니다.

self.flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
[self.flowLayout setMinimumLineSpacing:1.0f]; 
[self.flowLayout setItemSize:CGSizeMake(self.cellSize.width, self.cellSize.height)]; 
[self.flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical]; 
[self.collectionView setCollectionViewLayout:self.flowLayout]; 

UICollectionView가있는 UIScrollView 내부에 내장되어, 스크롤 뷰의 크기 안에 정확히 맞는 : 컬렉션 뷰는 약간의 지정을 할 UICollectionViewFlowLayout를 사용합니다. 스크롤보기 크기는 양방향으로 화면보다 훨씬 크게 설정됩니다. 하드 코딩 된 숫자는 테스트 용입니다. 나는 나중에 그들을 적절한 상수로 바꿀 것이다.

self.cellSize = CGSizeMake(150.0f, 150.0f); 
CGSize scrollViewSize = self.scrollView.contentSize; 
scrollViewSize.width = 20 * self.cellSize.width + 20.0f; 
scrollViewSize.height = 20 * self.cellSize.height + 20.0f; 
self.scrollView.contentSize = scrollViewSize; 

self.collectionViewHeightConstraint.constant = self.scrollView.contentSize.height; 
self.collectionViewWidthConstraint.constant = self.scrollView.contentSize.width; 

결과는 임의의 방향으로 스크롤 할 수있는 격자입니다. 그 부분이 효과가 있습니다.

그리드는 한 번에 하나의 축을 따라 비례 또는 신축성이 있어야합니다. 나는 하나의 축 줌 일어날 수 있도록 다음과 같은 핀치 제스처 인식기를 사용하고 (다시, Y에 대한 하드 코딩 된 1.0 값은 단지 테스트 용입니다) :

- (IBAction)handlePinchGesture:(UIPinchGestureRecognizer *)recognizer 
{ 
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, 1.0); 
    recognizer.scale = 1; 
} 

내가 핀치 제스처와 컬렉션 뷰의 크기를 조정, 각 셀의 레이블이 늘어나고 변형됩니다. 화면 캡처는 다음과 같습니다. deformed collection view http://afterburnerimages.com/IMG_0078.PNG

다른 관련 정보를 기꺼이 제공하고 모든 도움을드립니다.

+0

오류가 발생하는 것이 분명하지 않다. 하나의 차원 만보기로 늘리면 그 안에있는 모든 것이 한 차원으로 늘어나고 왜곡됩니다. 이것은 단지 기본 기하학이며 프로그래밍과는 아무런 관련이 없습니다. 라벨에있는 텍스트와 정확히 일치하는 부분은 무엇입니까? – rdelmar

+1

셀의 가로 세로 비율이 변경되는 경우에도 레이블의 가로 세로 비율을 유지하고 싶습니다.필자가 생각한 두 가지 옵션은 레이블의 크기를 셀 크기와 동일하게 유지하거나 셀이 없을 때 레이블을 비례 적으로 늘리는 것입니다. 나는 라벨의 뷰를 셀의 뷰와 별도로 제어하기를 바라고있다. –

답변

0

유 유 줌있는 ScrollView 대리자를 사용하여 다음 콜렉션 뷰가 들어있는 ScrollView를 사용하는 Oky, 귀하의 경우에 더 나은 유처럼 사용할 수 뻗어있다

예를 들어

,

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    _scrollView = [[UIScrollView alloc]initWithFrame:self.view.bounds]; 
    _scrollView.delegate = self; 

    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
    [flowLayout setMinimumLineSpacing:1.0f]; 
    [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical]; 
    [self.collectionVIew setCollectionViewLayout:flowLayout]; 
    [self.collectionVIew registerClass:[CustomCollectionVIewCell class] forCellWithReuseIdentifier:@"CELL_ID"]; 

    //setting up content size for scroll view 
    CGSize size = self.scrollView.contentSize; 
    size.width = 200 * 10; 
    size.height = 185 * 10; 
    self.scrollView.contentSize = size; 
    CGRect rect = CGRectZero; 
    rect.origin = self.scrollView.bounds.origin; 
    rect.size = size; 
    self.collectionVIew.frame = rect; 
    self.scrollView.backgroundColor = [UIColor greenColor]; 
    [self.scrollView addSubview:self.collectionVIew]; 
    [self.view addSubview:self.scrollView]; 

    // CGRect scrollViewFrame = self.scrollView.frame; 
    // CGFloat scaleWidth = _collectionVIew.frame.size.width/self.scrollView.contentSize.width; 
    // CGFloat scaleHeight = _collectionVIew.frame.size.height/self.scrollView.contentSize.height; 
    // CGFloat minScale = MIN(scaleWidth, scaleHeight); 


    //set min scale must be less than max zoom scale so that it can be zoomable 
    self.scrollView.minimumZoomScale = 0.5; 
    self.scrollView.maximumZoomScale = 1.0f; 
    // self.scrollView.zoomScale = minScale; //default is 1.0f; 

} 

이하 줌을

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
    { 
    return self.collectionVIew; //return collection view which is embedded inside scroll view 
    } 

을 수행하기 위해 스크롤 뷰 대의원을 사용하고 결과를 수집 V의 내용을 초래하지 않고 비례 스트레칭 아래 GIF 같은입니다 iew는,이 U 도움이되기를 바랍니다 .. :)

enter image description here

+0

제안 해 주셔서 감사합니다. 그러나 나는 비례 적으로가 아니라 가로로 만 콘텐츠를 늘리고 싶습니다. –

+0

셀을 변형 시키거나 변형시키지 않고 셀의 모양 (종횡비)을 변경하고 싶습니다. –

관련 문제