设置UISearchBar的搜索字段背景图像会更改填充

时间:2014-11-18 21:03:50

标签: ios uisearchbar spacing

当我在UIImage上设置搜索字段背景图片时,选中的放大镜和搜索栏中的占位符文本之间的填充会发生变化。

使用默认背景:

Good padding

使用自定义背景:

Bad padding

这一变化是由以下两行引起的:

UIImage *colorImage = [UIImage imageWithColor:[UIColor grayColor] size:CGSizeMake(28, 28)];
[self setSearchFieldBackgroundImage:[colorImage imageWithRoundedCorners:5] forState:UIControlStateNormal];

imageWithRoundedCorners:是一种类别方法,只需将图像绘制到角半径为CALayer的图像上,然后从图形上下文创建UIImage

为什么会这样,我该如何避免这种情况?我尝试传递一个显式可调整大小的图像,但这没有效果。

3 个答案:

答案 0 :(得分:30)

奇怪的是它会重置它,但是你可以使用这样的东西在设置背景图像后根据自己的喜好设置它。 searchTextPositionAdjustment是UISearchBar上的一个属性,运行完美。 8.0似乎是默认值,但您可以将其设置为您喜欢的任何内容。

[self.searchBar setSearchFieldBackgroundImage:[self imageWithColor:[UIColor grayColor] andSize:CGSizeMake(28.0, 28.0)] forState:UIControlStateNormal];
[self.searchBar setSearchTextPositionAdjustment:UIOffsetMake(8.0, 0.0)];

enter image description here

答案 1 :(得分:10)

对于现在使用Swift的所有人,您可以使用以下代码(适用于Swift 2)

let searchBarBackground = UIImage.roundedImage(UIImage.imageWithColor(UIColor.whiteColor(), size: CGSize(width: 28, height: 28)),cornerRadius: 2)
searchBar.setSearchFieldBackgroundImage(searchBarBackground, forState: .Normal)
searchBar.searchTextPositionAdjustment = UIOffsetMake(8.0, 0.0)

使用此扩展名为UIImage:

extension UIImage {
     class func imageWithColor(color: UIColor, size: CGSize) -> UIImage {
        let rect: CGRect = CGRectMake(0, 0, size.width, size.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIRectFill(rect)
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
    class func roundedImage(image: UIImage, cornerRadius: Int) -> UIImage {
        let rect = CGRect(origin:CGPoint(x: 0, y: 0), size: image.size)
        UIGraphicsBeginImageContextWithOptions(image.size, false, 1)
        UIBezierPath(
            roundedRect: rect,
            cornerRadius: CGFloat(cornerRadius)
        ).addClip()
        image.drawInRect(rect)
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}

给出这样的东西:

enter image description here

答案 2 :(得分:0)

更新的Swift 4解决方案

searchTextPositionAdjustment = UIOffset(horizontal: 8.0, vertical: 0.0)