UIButton의 이미지 크기를 어떻게 조정할 수 있습니까? 이미지를 다음과 같이 설정하고 있습니다.
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
그러나 이것은 이미지를 전체 버튼으로 채 웁니다. 이미지를 더 작게 만들려면 어떻게합니까?
UIButton의 이미지 크기를 어떻게 조정할 수 있습니까? 이미지를 다음과 같이 설정하고 있습니다.
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
그러나 이것은 이미지를 전체 버튼으로 채 웁니다. 이미지를 더 작게 만들려면 어떻게합니까?
답변:
Tim의 대답은 정확하지만 내 경우에는 더 간단한 해결책이 있었기 때문에 다른 제안을 추가하고 싶었습니다.
UIButton
버튼의 콘텐츠 모드를 설정할 수 있다는 것을 알지 못했기 때문에 이미지 삽입 을 설정 UIImageView
하려고했습니다 .UIEdgeInsets 및 하드 코딩 된 값을 모두 사용할 필요가 없었습니다. 버튼에서 기본 이미지보기에 액세스하고 컨텐츠 모드를 설정하십시오.
myButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
UIButton이 콘텐츠 모드 설정을 수신하지 못합니까?를 참조하십시오 .
스위프트 3
myButton.imageView?.contentMode = .scaleAspectFit
button.backgroundImageView.contentMode
가 작동하지 않음
스위프트 3 :
button.setImage(UIImage(named: "checkmark_white"), for: .normal)
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
contentVerticalAlignment/contentHorizontalAlignment
옵션으로 크기를 조정할 수있었습니다. 이것을 게시 해 주셔서 감사합니다.
contentHorizontalAlignment
및 contentVerticalAlignment
트릭
이미지가 너무 크면 (그리고 이미지를 작게 만들거나 할 수없는 경우) 처음 두 답변의 조합이 효과적입니다.
addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0)
이미지 삽입물을 바로 가져 오지 않으면을 변경하지 않고 이미지가 기울어 contentMode
집니다.
의 도움으로 팀 C의 대답 , 나는에 확장 만들 수 있었다 UIButton
당신이 사용하여 이미지 프레임을 지정할 수 있습니다 스위프트를 사용하여 .setImage()
추가로 기능을 frame
매개 변수를
extension UIButton{
func setImage(image: UIImage?, inFrame frame: CGRect?, forState state: UIControlState){
self.setImage(image, forState: state)
if let frame = frame{
self.imageEdgeInsets = UIEdgeInsets(
top: frame.minY - self.frame.minY,
left: frame.minX - self.frame.minX,
bottom: self.frame.maxY - frame.maxY,
right: self.frame.maxX - frame.maxX
)
}
}
}
당신이의 프레임 설정하기를 원한다면,이 사용하기 UIButton
에를 CGRectMake(0, 0, 64, 64)
, 그리고에 그것의 이미지를 설정 myImage
의 프레임으로 CGRectMake(8, 8, 48, 48)
사용할 수있는,
let button: UIButton = UIButton(frame: CGRectMake(0, 0, 64, 64))
button.setImage(
myImage,
inFrame: CGRectMake(8, 8, 48, 48),
forState: UIControlState.Normal
)
로 아이콘 크기를 변경할 때
UIEdgeInsetsMake(top, left, bottom, right)
버튼 크기와 UIEdgeInsetsMake의 기능이 음수 값이 양수인 것처럼 작동하도록합니다.
예 : 높이가 100이고 화면비가 1 : 1 인 두 개의 버튼.
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(45, 0, 45, 0)
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(60, 0, 60, 0)
ABS (100-(40 + 40)) = ABS (100-(60 + 60))이므로 예제 1과 3은 동일합니다.
한 가지 방법은 다음과 같은 코드로 UIImage의 크기를 조정하는 것입니다. 참고 :이 코드는 높이를 기준으로 만 배율을 조정하지만 너비를 기준으로 배율을 조정하도록 기능을 쉽게 조정할 수 있습니다.
let targetHeight = CGFloat(28)
let newImage = resizeImage(image: UIImage(named: "Image.png")!, targetHeight: targetHeight)
button.setImage(newImage, for: .normal)
fileprivate func resizeImage(image: UIImage, targetHeight: CGFloat) -> UIImage {
// Get current image size
let size = image.size
// Compute scaled, new size
let heightRatio = targetHeight / size.height
let newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
// Create new image
UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
image.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Return new image
return newImage!
}