[ios] UIButton은 iPhone에서 Aspect Fit으로 이동하지 않습니다.

몇 개의 UIButton이 있고 IB에서는 Aspect Fit으로 설정되어 있지만 어떤 이유로 항상 늘립니다. 설정해야 할 다른 것이 있습니까? 나는 모든 다른보기 모드를 시도했지만 작동하지 않고 모두 늘어납니다.



답변

나는 전에 그 문제가 있었다. 나는 내 이미지를 넣어 그것을 해결 UIImageView하는 경우, contentMode설정이 실제로 작동, 투명 정의를 넣어 UIButton그 맨 위에.

편집 :이 대답은 쓸모가 없습니다. 최신 버전의 iOS에서 정답@Werner Altewischer의 답변 을 참조하십시오 .


답변

해결책은 contentModeimageView속성 을 설정하는 것 UIButton입니다. 이 UIButton작업을 수행하려면 사용자 지정 형식으로을 만들어야합니다 (그렇지 않으면 nil이 속성에 대해 반환 됨).


답변

이 방법은 저에게 매우 효과적이었습니다. :

에서 XIB 버튼과 세트를 선택 user defined runtime attributes:

  • 주요 경로 : self.imageView.contentMode
  • 유형: Number
  • 값: 1

솔루션을 더 명확하게 보려면 여기를 클릭하십시오.

열거 형을 사용할 수 없기 때문에 숫자를 사용합니다. 그러나 UIViewContentModeScaleAspectFit는 1과 같습니다.


답변

Interface Builder에서이 작업을 수행하는 경우 런타임 속성 검사기를 사용하여 코드없이 직접 설정할 수 있습니다.

버튼의 키 경로를 “숫자”유형과 “1”값 (또는 원하는 모드)을 사용하여 “imageView.contentMode”로 설정합니다.

imageview.contentMode = 1


답변

contentMode에 버튼의 imageView를 사용합니다. 버튼 자체가 아닙니다.

homeButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
homeButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
homeButton.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
[homeButton setImage:[UIImage imageNamed:kPNGLogo] forState:UIControlStateNormal];


답변

당신이에 이미지를 넣을 경우 UIImageView버튼 뒤에, 당신은 내장의 기능 느슨한 것 UIButton같은 클래스 adjustsImageWhenHighlightedadjustsImageWhenDisabled, 서로 다른 상태에 대한 다른 이미지를 설정하는 과정 능력 (이 자신을 일의 골치 아플없이).

우리는 이미지를 원한다면 모든 제어 상태에 대한 unstreched을 한 approuch을 사용하여 이미지를 얻을 수 있습니다 imageWithCGImage:scale:orientation다음과 같은 방법으로 :

- (UIImage *) getScaledImage:(UIImage *)img insideButton:(UIButton *)btn {

    // Check which dimension (width or height) to pay respect to and
    // calculate the scale factor
    CGFloat imgRatio = img.size.width / img.size.height,
            btnRatio = btn.frame.size.width / btn.frame.size.height,
            scaleFactor = (imgRatio > btnRatio
                           ? img.size.width / btn.frame.size.width
                           : img.size.height / btn.frame.size.height;

    // Create image using scale factor
    UIImage *scaledImg = [UIImage imageWithCGImage:[img CGImage]
                                             scale:scaleFactor
                                       orientation:UIImageOrientationUp];
    return scaledImg;
}

이를 구현하기 위해 다음과 같이 작성합니다.

UIImage *scaledImg = [self getScaledImage:myBtnImg insideButton:myBtn];
[myBtn setImage:scaledImg forState:UIControlStateNormal];

이렇게하면 모든 제어 상태에서 이미지가 늘어나는 것을 방지 할 수 있습니다. 그것은 나를 위해 일했지만 그렇지 않은 경우 알려주십시오!

참고 : 여기서는와 관련된 문제를 다루고 UIButton있지만 , 또는 이미지를 맞추고 싶은 것이 insideButton:있을 수도 있습니다 insideView:.


답변

나는이 문제가 얼마 전에 있었다. 내가 가진 문제는이 효과를 제한된 배경 UIButton에 적용하려고했기 때문에 쉽게 조정할 수 없다는 것을 의미합니다.

트릭은 이미지로 설정 한 다음 @ayreguitar의 기술을 적용하면 문제가 해결됩니다!

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setContentMode:UIViewContentModeScaleAspectFill];
[myButton setImage:@"myImage.png" forState:UIControlStateNormal];