adi*_*dit 139 xcode objective-c uibutton ios
如何调整UIButton的图像大小?我正在设置这样的图像:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
但是,这会将图像填满整个按钮,如何使图像变小?
小智 226
如果我理解你正在尝试做什么,你需要使用按钮图像边缘插入.就像是:
myLikesButton.imageEdgeInsets = UIEdgeInsets(top, left, bottom, right)
Run Code Online (Sandbox Code Playgroud)
Kyl*_*egg 89
蒂姆的答案是正确的,但我想补充一点建议,因为在我的情况下,完全有一个更简单的解决方案.
我想设置UIButton图像插入,因为我没有意识到我可以在按钮上设置内容模式UIImageView,这将无需使用UIEdgeInsets和硬编码值.只需访问按钮上的基础imageview并设置内容模式:
myButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
myButton.imageView?.contentMode = .scaleAspectFit
Run Code Online (Sandbox Code Playgroud)
Jos*_*nor 33
斯威夫特3:
button.setImage(UIImage(named: "checkmark_white"), for: .normal)
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
Run Code Online (Sandbox Code Playgroud)
小智 23
你可以使用imageEdgeInsets属性按钮图像周围的矩形的插入或开始边距.
[self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
Run Code Online (Sandbox Code Playgroud)
正值会缩小或缩小边缘移动.负值会扩展或偏离该边缘.
小智 21
如果您的图像太大(并且您不能/不想让图像变小),前两个答案的组合效果很好.
addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0)
Run Code Online (Sandbox Code Playgroud)
除非你的图像插入恰到好处,否则图像会在不改变图像的情况下倾斜contentMode.
Esq*_*uth 15
继承了Swift版本:
myButton.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Run Code Online (Sandbox Code Playgroud)
Ale*_*kov 14
如果您使用按钮的符号图像,那么此解决方案更好:
button.setPreferredSymbolConfiguration(UIImage.SymbolConfiguration(pointSize: 48), forImageIn: .normal)
Run Code Online (Sandbox Code Playgroud)
tri*_*ode 13
插入图像对我来说很有效,但我还需要将按钮“类型”设置为“自定义”,将按钮“样式”设置为“默认”。Xcode 13 中添加的按钮默认类型为 System,样式为 Plain。
self.imageEdgeInsets = UIEdgeInsets(top: 3.0, left: 3.0, bottom: 3.0, right: 3.0)
Run Code Online (Sandbox Code Playgroud)
斯威夫特4
您需要按此特定顺序使用这两行代码.您只需要更改边缘插入的顶部和底部值.
addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(10.0, 0.0, 10.0, 0.0)
Run Code Online (Sandbox Code Playgroud)
在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
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用它,如果你想设置一个UIButtonto 的框架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
)
Run Code Online (Sandbox Code Playgroud)
使用更改图标大小时
UIEdgeInsetsMake(top, left, bottom, right),请记住按钮尺寸和UIEdgeInsetsMake可以将负值当作正值使用。
示例:两个高度为100且纵横比为1:1的按钮。
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
Run Code Online (Sandbox Code Playgroud)
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(45, 0, 45, 0)
Run Code Online (Sandbox Code Playgroud)
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(60, 0, 60, 0)
Run Code Online (Sandbox Code Playgroud)
示例1和3相同,因为ABS(100-(40 + 40))= ABS(100-(60 + 60))
这是缩放UIButton的imageView的另一种解决方案。
button.imageView?.layer.transform = CATransform3DMakeScale(0.8, 0.8, 0.8)
Run Code Online (Sandbox Code Playgroud)
更新为 Swift > 5
设置尺寸:
button.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
Run Code Online (Sandbox Code Playgroud)
设置边距:
button.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126622 次 |
| 最近记录: |