swift - 更改栏按钮图像

标签 swift uibarbuttonitem

当用户从 photoLibrary 或相机加载图像时,我尝试更改我的 barbutton 图像。但我的 barbutton 图像总是调整大小并变得非常大。我该如何解决?

enter image description here

enter image description here

我尝试使用 socket 。这是我的代码

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
        self.imageData = image.pngData()!

        let button = UIButton(type: .custom)
        button.frame = CGRect(x: 0, y: 0, width: 24, height: 24)
        button.layer.cornerRadius = 0.5
        button.clipsToBounds = true
        button.setImage(UIImage(data: imageData!), for: .normal)

        photoBarButton.customView = button


        picker.dismiss(animated: true, completion: nil)
    }

如果我尝试做这样的事情:

photoBarButton.image = image.withRenderingMode(.alwaysOriginal)

我得到 enter image description here

最佳答案

您需要先调整所选图像的大小。添加以下函数以调整图像大小:

extension UIImage {

    func resizedImage(newSize: CGSize) -> UIImage? {
        guard size != newSize else { return self }

        let hasAlpha = false
        let scale: CGFloat = 0.0
        UIGraphicsBeginImageContextWithOptions(newSize, !hasAlpha, scale)
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)

        draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        let newImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }
}

在您的代码中添加上述扩展并尝试在 UIBarButtonItem 中设置图像:

addAppointmentButton.image = pickedImage.resizedImage(newSize: CGSize(width: 24, height: 24))?.withRenderingMode(.alwaysOriginal)

enter image description here

希望对您有所帮助。

关于swift - 更改栏按钮图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724079/

相关文章:

ios - swift 3 Xcode 8.3 中的 HTTP 请求

xcode:颜色图标在 Storyboard中显示为灰色方 block

ios - 尝试构建登录时出现条件绑定(bind)错误的初始化程序

ios - 如何将 2 个 detailTextLabels 添加到 Swift 中的单元格?

SwiftUI - 获取用户坐标以传入 API 调用

ios - 如何在 View Controller 中使用更多菜单 Controller

iOS 8 - UIBarButtonItem 推送 Segue 覆盖操作

ios - UIPickerView BarButton 文本颜色没有改变但是当点击按钮时颜色在 Objective-C 中改变

c# - 将 UIBarButtonItem 添加到 Xamarin IOS 中的导航栏

iphone - 获得带有箭头图标的 "back"导航按钮的最佳方法?