【问题标题】:UISegmentedControl maintain aspect ratio on imageUISegmentedControl 保持图像的纵横比
【发布时间】:2016-12-20 13:41:42
【问题描述】:

我很难在 UISegmentedControl 上制作图像,以保持它们的纵横比而不是缩放到所有边。 这是它的样子:

图像是 100X100(除了 nr 6 将很快更换),我希望它们保持纵横比。

我试过了:

self.segment.contentMode = .ScaleAspectFit
//and:
self.segment.contentMode = UIViewContentMode.Center

有没有办法可以在段中定位 UIImageView..那样我可以设置 contentMode..对吗?还是有其他方法?

谢谢

【问题讨论】:

    标签: ios swift uiimageview uiimage uisegmentedcontrol


    【解决方案1】:
    segmentedControl.subviews.flatMap{$0.subviews}.forEach { subview in
        if let imageView = subview as? UIImageView, let image = imageView.image, image.size.width > 5 {
            // The imageView which isn't separator
            imageView.contentMode = .scaleAspectFit
        }
    }
    

    【讨论】:

    • 请补充说明。
    • 这是 found 的 唯一 解决方案,它实际上可以可靠地工作。但是,我很难弄清楚何时(即代码中的何处)执行它。我有一个 UISegmentedControl 子类,并尝试将它放在 awakeFromNib 中,但它没有用。我对 .valueChanged 也有一个目标操作,当我在那里处理它时它可以工作。因此,(重新)绘图的顺序有些东西显然会有所不同。就我而言,它位于表格视图单元格中,所以也许 layoutSubviews 正在运行?
    • 我们决定简单地使用带有按钮的堆栈视图
    【解决方案2】:

    实际上,有一个很棒的通用解决方案:

    UIImageView.appearance(whenContainedInInstancesOf: [UISegmentedControl.self]).contentMode = .scaleAspectFit
    

    这使用此处描述的方法:UIImageView.appearance is overriding UISegmentedControl.appearance

    在我的例子中,我将它限制为 UISegmentedControl 的子类(以防我在其他情况下需要默认 aspectFill)。

    【讨论】:

      【解决方案3】:

      我没有找到如何将 contentMode 设置为 ScaleAspectFit 但您可以在设置图像时使用以下代码在图像周围设置边距:

      yourSegmentedControl.setImage(yourImage.resizableImage(withCapInsets: .init(top: 0, left: 10, bottom: 0, right: 10), resizingMode: .stretch), forSegmentAt: 0)
      

      您可以根据需要更改“top”、“left”、“bottom”和“right”的值。 这对我有用,我希望它会有所帮助!

      【讨论】:

        【解决方案4】:

        这可能为时已晚,但我相信它会对某人有所帮助。

        我的问题 #1: 分段控件中的图像比例失真。

        我的问题 #2: 您甚至无法更改图像的颜色。它仍然是黑色的。即使您使用 .alwaysTemplate 和 imageview tint colour。它不会让步。

        解决方案: 忘记尝试破解 SDK,或通过非官方方式实现目标。 Apple 可以轻松更改 SegmentedControl,您的所有工作都变得多余。 改用这个:BetterSegmentedControl。编码愉快。

        它高度可定制且易于使用,而且它支持图像。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-11
          • 1970-01-01
          • 2018-03-11
          • 2021-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多