2017-10-28 19 views
0

에서 휴식을 변환있는 UITableViewCell 내가 만든 것, 내가 cellForRowAtIndexPath의 내부에 다음 코드를 실행하여 각 셀의 왼쪽에있는 이미지를 보여주는 테이블보기했다 :는 응용 프로그램에서 아이폰 OS (11)

cell.imageView.image = [UIImage imageNamed:myImage];

을하지만, 이미지가 너무 커서, 그래서 그것을 축소 :

cell.imageView.transform = CGAffineTransformMakeScale(0.3, 0.3);

이것은 아이폰 OS 10에서 잘 작동하지만 아이폰 OS (11) SDK와 최신 엑스 코드로 업그레이드하면, 이미지가 엄청난 얻었다. 이미지 뷰를 변환하는 코드의 두 번째 줄은 현재 아무 것도하지 않고 있습니다. 주석을 달거나 0.3을 다른 것으로 변경하는 등 아무런 차이가 없습니다. CGAffineTransformMakeScale은 여전히 ​​새로운 Xcode에 문서를 가지고 있으므로 폐기되지 않았다고 가정하고 있습니다. 그런데 왜 iOS 11에서이 중단을 했습니까? 어떻게 수정합니까? 어떤 아이디어? 미리 감사드립니다! Objective-C를 사용하고 있습니다.

편집 :

  1. 변경 cell.imageView.transform = CGAffineTransformMakeScale(0.0000001, 0.0000001);에 두 번째 줄 :

    그냥 코드 3 명 변경을 시도했다. 아무 것도 발생하지 않습니다 (즉, 이미지보기와 이미지보기가 여전히 거대합니다).

  2. 두 번째 줄을 cell.imageView.transform = CGAffineTransformMakeScale(0, 0);으로 변경하십시오. 이미지보기에서 이미지가 사라지지만 이미지보기는 여전히 같은 크기이며 셀에서 텍스트를 옮겨서 오른쪽으로 멀리 밀면 알 수 있습니다.

  3. 첫 번째 코드 줄을 제거합니다 (더 이상 이미지 뷰에 이미지를 할당하지 않음). 이미지 뷰가 사라지고 텍스트가 셀의 왼쪽으로 이동합니다.

아마도이 일이 벌어지는 일에 대해 밝힐 수 있습니다.

+0

이미지를 –

+0

@SyedQamarAbbas로 공유하면 이미지보기가 동적이며 표 셀의 제목 왼쪽에 표시 할 수있는 이미지가 많이 있습니다. iOS 11 이전에는 모두가 적절하게 축소되었으며 현재는 그 중 아무 것도 수행하지 않습니다. 따라서 이미지와 관련이 없습니다. – Viktor

답변

0

찾을 때문에이 질문에서 바울의 대답에 신용을 가진 내 자신의 질문에 대한 답변 : How to resize a cell.imageView in a TableView and apply tintColor in Swift

CGSize itemSize = CGSizeMake(50, 50); 
UIGraphicsBeginImageContextWithOptions(itemSize, false, 0); 
CGRect imageRect = CGRectMake(0, 0, itemSize.width, itemSize.height); 
[cell.imageView.image drawInRect:imageRect]; 
cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

나는 여전히 오래된 CGAffineTransformMakeScale이 더 이상 작동하지 않는 이유를 알지 못하지만 작업이 완료됩니다.

1

당신은 imageView는 당신이 실제로 이렇게 같은 이미지 뷰의 contentMode 속성을 사용해야에 맞게 이미지 크기를 조정하려고 그래서 경우 :

cell.imageView.contentMode = UIViewContentModeScaleAspectFit; 

또는 다른

cell.imageView.contentMode = .scaleAspectFit 

이 유지에 대한 스위프트에 이미지의 크기와 치수를 바꾸지 않고 최대 크기의 이미지를 와 같이 imageView에 맞 춥니 다.또한 imageView의 크기를 기본적으로 채우는 UIViewContentModeScaleAspectFit (또는 .scaleAspectFill은 Swift에서)을 시도 할 수 있지만 이미지가 이미지보기보다 넓거나 크면 맞지 않는 부분이 생깁니다.여기

모두는 A의 Obj-C에서 직접 contentModes와 스위프트 소스 파일은 다음과 같습니다

typedef NS_ENUM(NSInteger, UIViewContentMode) { 
UIViewContentModeScaleToFill, 
UIViewContentModeScaleAspectFit,  // contents scaled to fit with fixed aspect. remainder is transparent 
UIViewContentModeScaleAspectFill,  // contents scaled to fill with fixed aspect. some portion of content may be clipped. 
UIViewContentModeRedraw,    // redraw on bounds change (calls -setNeedsDisplay) 
UIViewContentModeCenter,    // contents remain same size. positioned adjusted. 
UIViewContentModeTop, 
UIViewContentModeBottom, 
UIViewContentModeLeft, 
UIViewContentModeRight, 
UIViewContentModeTopLeft, 
UIViewContentModeTopRight, 
UIViewContentModeBottomLeft, 
UIViewContentModeBottomRight, 
}; 

public enum UIViewContentMode : Int { 
    case scaleToFill 
    case scaleAspectFit // contents scaled to fit with fixed aspect. remainder is transparent 
    case scaleAspectFill // contents scaled to fill with fixed aspect. some portion of content may be clipped. 
    case redraw // redraw on bounds change (calls -setNeedsDisplay) 
    case center // contents remain same size. positioned adjusted. 
    case top 
    case bottom 
    case left 
    case right 
    case topLeft 
    case topRight 
    case bottomLeft 
    case bottomRight 
} 

편집 :

난 당신이 또한 imageView 자체의 크기를 변화에 관심이 볼 수 있기 때문에 ("텍스트를위한 더 많은 공간을 남겨두기") 스토리 보드 나 프로그래밍 방식으로 AutoLayout을 사용하여 자신의 imageView을 추가하고 크기 및 위치를 지정하려면 실제로을 셀에 사용하는 대신 편리하고 표준화 된 도구로 사용됩니다.

당신이 익숙하지 않다면, 나는 AutoLayout 튜토리얼을 위해 google을 쓸 것이다. 아니면 "커스텀 UITableViewCell을 생성하기 위해 AutoLayout을 사용하는 것"

실제로 자신 만의 서브 클래스를 만들고 싶지 않다면, 원하는 크기로 수동으로 크기를 변경하기 위해`cell.imageView.frame = ... ' 다음 컨텐츠 모드를 설정하면 이미지가 여전히 잘 맞는 확인합니다

을이 질문을 참조하십시오. How do I make UITableViewCell's ImageView a fixed size even when the image is smaller

+0

예, "채우기"또는 "적합"값 또는 다른 값 중 하나를 사용하고'clipsToBounds'를 true로 설정하십시오. – danh

+0

객관적인 C 코드는'cell.imageView.contentMode = UIViewContentModeScaleAspectFit; – danh

+0

@ gadu와 @danh에 감사드립니다. 내가 실제로하려는 것은 이미지 뷰 내에서 이미지를 축소하는 것이 아니라 이미지 뷰를 축소하는 것입니다. 구별이 중요한 이유는 이것이 텍스트의 나머지 부분에 더 많은 공간을 남겨 놓는 것입니다. 'cell.imageView.transform = CGAffineTransformMakeScale (0.3, 0.3);'코드는 iOS 10에서 두 가지 모두를 수행했지만 iOS 11에서는 전혀 수행하지 않았습니다. – Viktor