【问题标题】:Stretched images in UISegmentedControlUISegmentedControl 中的拉伸图像
【发布时间】:2014-02-17 14:56:30
【问题描述】:

我正在尝试将图像添加到我的 UISegmentedControl,但图像始终会自动拉伸以填充整个控件(见图)。我目前正在通过调用 setImage:forSegmentAtIndex: 来设置图像。如何设置图像以保持其纵横比?这似乎应该是一件容易的事,但我一直无法弄清楚。

【问题讨论】:

  • 我有相反的问题。我正试图让我的图像拉伸,而它现在只是居中

标签: ios uisegmentedcontrol


【解决方案1】:

设置图像时,请使用:

UIImage *myNewImage = [myOldImage resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
[segment setImage:myNewImage forSegmentAtIndex:i];

top, left, bottom, and right 是您愿意拉伸的图像的边缘。如果您不想要任何可拉伸区域,请使用UIEdgeInsetsZero

【讨论】:

  • 我试过UIEdgeInsetsZero,现在图像根本不显示。
【解决方案2】:

与道尔顿的回答非常相似,虽然我在界面构建器中构建了我的视图,所以不得不替换图像,如下所示:

    self.codesDisplaySegment.contentMode = UIViewContentModeCenter;
    for (int ii = 0 ; ii < self.codesDisplaySegment.numberOfSegments ; ++ii)
    {
        UIImage *img = [self.codesDisplaySegment imageForSegmentAtIndex: ii];
        img = [img resizableImageWithCapInsets: UIEdgeInsetsZero];
        [self.codesDisplaySegment setImage: img forSegmentAtIndex: ii];
    }

这样做解决了我的问题(正如您所描述的那样。)

【讨论】:

  • 这会调整我的图像大小,但随后我的图像会偏离中心
【解决方案3】:

您可以在设置图像时使用以下代码在图像周围设置边距:

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

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

【讨论】:

    【解决方案4】:

    使用足够小的@1x 图像,使其完全不需要缩放,也不会弄乱纵横比。当然,您的@2x 和@3x 图像可以更大。

    【讨论】:

    • 是的,就像一个魅力。如果图像足够小以适合,那么它看起来是正确的。如果它太大,它会被挤进去。
    猜你喜欢
    • 2014-03-29
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2011-01-07
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多