Настройка фонового изображения поля поиска UISearchBar изменяет заполнение
Когда я устанавливаю фоновое изображение поля поиска на UIImage
, добавляется отступы между увеличительным стеклом и текстом-заполнителем в строке поиска.
С фоном по умолчанию:
![Good padding]()
С пользовательским фоном:
![Bad padding]()
Это изменение вызвано этими двумя строками:
UIImage *colorImage = [UIImage imageWithColor:[UIColor grayColor] size:CGSizeMake(28, 28)];
[self setSearchFieldBackgroundImage:[colorImage imageWithRoundedCorners:5] forState:UIControlStateNormal];
imageWithRoundedCorners:
- это метод категории, который просто рисует изображение на a CALayer
с радиусом угла, а затем создает UIImage
из графического контекста.
Почему это и как я могу избежать этого? Я попытался передать явно изменяемый размер изображения, но это не повлияло.
Ответы
Ответ 1
Нечетно, что он сбрасывает его, однако вы можете использовать что-то подобное, чтобы настроить его по своему усмотрению после установки фонового изображения. 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]()
Ответ 2
Для всех тех, кто сейчас использует 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()
}
}
Чтобы сделать что-то подобное:
![введите описание изображения здесь]()