【问题标题】:How to fit an image inside SegmentController programmatically - Swift如何以编程方式将图像放入 SegmentController 中 - Swift
【发布时间】:2018-06-17 00:26:56
【问题描述】:

我需要在 SegmentController - Swift 中设置一个图像。

    let testTypeSegmentedControl: UISegmentedControl = {

    let types = [“Green”, “Blue”] // v_concreteSelectedIndex
    let sc = UISegmentedControl(items: types)
    sc.setImage((UIImage(named: "Green_Main.png")), forSegmentAt: 0)

    sc.selectedSegmentIndex = 0
    sc.translatesAutoresizingMaskIntoConstraints = false
    sc.tintColor = .black

    return sc
}()

如何在段控制器内正确修复图像。

我试过了:

sc.contentMode = .scaleAspectFill

但似乎效果不佳。

我尝试使用约束,但我不知道该怎么做。

有什么建议吗?

【问题讨论】:

  • 投反对票的原因是什么?
  • 尽可能用颜色代替图像
  • 我可以使用颜色,但我有兴趣学习如何使用照片。
  • 检查此链接中的解决方案可能会有所帮助:stackoverflow.com/questions/3001313/… 或尝试给 clipsToBounds = true。
  • 我之前已经检查过了,这不是我想要的,我想以编程方式进行。

标签: swift uisegmentedcontrol


【解决方案1】:

结果不是您所期望的,因为您使用的原始 .png 图像分辨率更高。您永远不应该使用“大”图像来仅显示小图片。完整的图像将被加载到内存中,并且只会显示其 10% 的像素,因此您将白白使用大量内存。

如果你真的想使用这个资源,你可以做的是用之前的代码创建一个新图像,并使用这个新生成的图像。

下面的方法返回一个新的图片,你可以在你的UISegmentedControl中使用,你可以释放大的。

func image(with image: UIImage?, scaledTo newSize: CGSize) -> UIImage? {
        UIGraphicsBeginImageContext(newSize)
        image?.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        let newImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }

在您的代码中:

    let testTypeSegmentedControl: UISegmentedControl = {
    let sc = UISegmentedControl(items: ["One", "Two"])
        sc.selectedSegmentIndex = 0
        sc.translatesAutoresizingMaskIntoConstraints = false
        return sc
    }()


override func viewDidLoad() {

    super.viewDidLoad()
    self.view.addSubview(testTypeSegmentedControl)

    let newImage = image(with: (UIImage(named: "watermelon.png")), scaledTo: CGSize(width: 32, height: 30))
    testTypeSegmentedControl.setImage(newImage , forSegmentAt: 0)

}

【讨论】:

  • 伙计,这是一个很好的解释,可以在任何地方使用。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多