You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:如何判断相册选中图片横竖屏,仅为横屏图添加内容模式切换按钮

解决横竖屏图片判断与按钮显示问题

很简单,核心就是通过UIImage的宽高比例来判断它是横屏(mode1)还是竖屏(mode2),再结合图片选择器的代理方法控制按钮的显示状态。下面是具体实现步骤:

1. 明确判断逻辑

判断图片横竖屏的关键是对比图片的宽度和高度:

  • 如果 image.size.width > image.size.height:属于横屏(mode1),需要显示更改内容模式的按钮
  • 如果 image.size.width < image.size.height:属于竖屏(mode2),隐藏按钮
  • (可选)如果宽高相等(正方形图片),可以根据你的需求决定是否显示按钮

注意:UIImage的size属性是逻辑尺寸,但宽高比例和实际像素比例一致,所以直接对比宽高值就够了,不需要额外处理scale。

2. 在图片选择器代理方法中实现判断

你已经初始化了UIImagePickerController并设置了代理,接下来只需要实现didFinishPickingMediaWithInfo代理方法,在里面获取选中的图片、判断横竖屏,再控制按钮显示:

extension YourViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picker.dismiss(animated: true)
        
        // 获取选中的原始图片(也可以用editedImage如果允许编辑)
        guard let selectedImage = info[.originalImage] as? UIImage else {
            print("无法获取选中的图片")
            return
        }
        
        // 设置图片的内容模式为scaleAspectFit
        yourImageView.contentMode = .scaleAspectFit
        yourImageView.image = selectedImage
        
        // 判断是否为横屏(mode1)
        let isLandscapeMode = selectedImage.size.width > selectedImage.size.height
        
        // 控制更改内容模式按钮的显示:仅mode1显示
        yourContentModeButton.isHidden = !isLandscapeMode
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true)
    }
}

3. 补全图片选择器初始化代码

你之前的初始化代码可以补全为:

let picker = UIImagePickerController()
picker.delegate = self
picker.navigationBar.tintColor = UIColor.white
picker.sourceType = .photoLibrary // 可根据需求换成.camera
picker.allowsEditing = false // 需要编辑功能的话设为true
present(picker, animated: true)

这样就能实现:选中横屏图片时显示更改内容模式的按钮,竖屏图片时按钮自动隐藏啦~

内容的提问来源于stack exchange,提问作者Dimoreno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:29:53