ฉันจะปรับขนาดรูปภาพของ UIButton ได้อย่างไร ฉันกำลังตั้งค่าภาพเช่นนี้:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
อย่างไรก็ตามการเติมภาพให้เต็มปุ่มฉันจะทำให้รูปภาพเล็กลงได้อย่างไร
ฉันจะปรับขนาดรูปภาพของ UIButton ได้อย่างไร ฉันกำลังตั้งค่าภาพเช่นนี้:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
อย่างไรก็ตามการเติมภาพให้เต็มปุ่มฉันจะทำให้รูปภาพเล็กลงได้อย่างไร
คำตอบ:
หากฉันเข้าใจอย่างถูกต้องว่าคุณกำลังพยายามทำอะไรคุณจะต้องเล่นกับขอบภาพของปุ่ม สิ่งที่ต้องการ:
myLikesButton.imageEdgeInsets = UIEdgeInsets(top, left, bottom, right)
คำตอบของทิมนั้นถูกต้อง แต่ฉันต้องการเพิ่มข้อเสนอแนะอื่นเพราะในกรณีของฉันมีวิธีแก้ปัญหาที่ง่ายกว่าโดยสิ้นเชิง
ฉันกำลังมองหาการตั้งค่าUIButton
ภาพขุ่นมัวเพราะฉันไม่ได้ตระหนักว่าฉันสามารถตั้งค่าโหมดเนื้อหาบนปุ่มUIImageView
ซึ่งจะทำให้ไม่จำเป็นต้องใช้ UIEdgeInsets และค่าฮาร์ดโค้ดทั้งหมด เพียงเข้าไปที่ imageview พื้นฐานบนปุ่มและตั้งค่าโหมดเนื้อหา:
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
เว้นแต่คุณจะได้รับขุ่นภาพเพียงขวาภาพจะถูกบิดเบือนโดยไม่ต้องเปลี่ยน
คุณสามารถใช้imageEdgeInsets
คุณสมบัติระยะขอบของสิ่งที่ใส่เข้าไปหรือเริ่มแรกสำหรับสี่เหลี่ยมรอบ ๆ รูปของปุ่ม
[self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
ค่าบวกจะลดขนาดหรือแทรกเข้าไปขอบนั้นคือการเคลื่อนไหว ค่าลบจะขยายหรือลบออกขอบนั้น
นี่คือวิธีแก้ปัญหาอื่น ๆ ในการปรับขนาด imageView ของ UIButton
button.imageView?.layer.transform = CATransform3DMakeScale(0.8, 0.8, 0.8)
นี่คือเวอร์ชั่นของ Swift:
myButton.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
สวิฟต์ 4
คุณจะต้องใช้รหัสสองบรรทัดนี้ตามลำดับเฉพาะ สิ่งที่คุณต้องทำก็คือเปลี่ยนค่าขอบด้านบนและด้านล่าง
addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(10.0, 0.0, 10.0, 0.0)
EXC_BAD_ACCESS
override func layoutSubviews()
ด้วยความช่วยเหลือของคำตอบของTim Cฉันสามารถสร้างส่วนขยายในการUIButton
ใช้ Swift ที่ช่วยให้คุณระบุเฟรมรูปภาพโดยใช้.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
)
}
}
}
ใช้สิ่งนี้หากคุณต้องการตั้งค่าเฟรมของ a 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)
ตัวอย่างที่ 1 และ 3 เหมือนกันตั้งแต่ ABS (100 - (40 + 40)) = ABS (100 - (60 + 60))
สวิฟท์ 3
ฉันตั้งค่าความกว้างและความสูงของปุ่มเป็น 40 และช่องว่างภายในของฉันจาก EdgeInsetsMake คือ 15 ทุกด้าน ฉันแนะนำให้เพิ่มสีพื้นหลังให้กับปุ่มของคุณเพื่อดูช่องว่างภายในจริง
myButton.backgroundColor = UIColor.gray // sample color to check padding
myButton.imageView?.contentMode = .scaleAspectFit
myButton.imageEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15)
วิธีการหนึ่งคือปรับขนาด 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!
}
อัปเดตสำหรับ Swift> 5
กำหนดขนาด:
button.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
ตั้งค่าระยะขอบ:
button.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
อัปเดตสำหรับ Swift 3
yourButtonName.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
ฉันคิดว่าขนาดภาพของคุณก็เหมือนกันกับขนาดปุ่มจากนั้นคุณใส่ภาพในพื้นหลังของปุ่มเช่น:
[myLikesButton setBackgroundImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
คุณมีรูปถ่ายและปุ่มขนาดเท่ากันฉันหวังว่าคุณจะเข้าใจจุดของฉัน