【问题标题】:iOS UISearchBar text field backgroundiOS UISearchBar 文本字段背景
【发布时间】:2012-11-30 13:16:45
【问题描述】:

我正在尝试自定义 iOS 上 UISearchBar 的文本字段,但我遇到了问题。使用以下方法:

[searchBar setSearchFieldBackgroundImage:searchFieldImage forState:UIControlStateNormal];

在文本字段中给了我图像,但它很小。图像只有 40x15 px 尺寸,用于拉伸。我正在按如下方式创建图像:

UIImage *searchFieldImage = [[UIImage imageNamed:@"input_15x40.png"]
                  resizableImageWithCapInsets:UIEdgeInsetsMake(7, 19, 7, 20)];

但是,这种外观修改似乎并没有拉伸图像 - 只是保持原样。如何使用可拉伸图像自定义 UISearchBar 的文本字段图像?

编辑 我应该说条是水平拉伸的,但它不是垂直拉伸的,因此只有 15px 的高度。

【问题讨论】:

  • 没有。当时这是一个图像没有垂直拉伸到所需高度的问题,因为图像本身设置了包裹它的视图的框架。因此无需进行垂直拉伸。您链接的另一个问题仅涉及更改字段颜色 - 两个不同且独立的问题,答案可能重叠。

标签: objective-c ios uikit uisearchbar


【解决方案1】:
let searchTextField = searchBar.valueForKey("_searchField") as? UITextField
searchTextField?.backgroundColor = UIColor.redColor()

【讨论】:

    【解决方案2】:

    我在您的代码中看到的唯一问题是您创建了名为 searchFieldImage 的 var 并将其用作 searchField。

    这段代码对我有用:

    UIImage *searchFieldImage = [[UIImage imageNamed:@"input_15x40.png"]
                  resizableImageWithCapInsets:UIEdgeInsetsMake(7, 19, 7, 20)];
    
    [searchBar setSearchFieldBackgroundImage:searchFieldImage forState:UIControlStateNormal];
    

    -

    编辑:

    在高度上,图片不会被拉伸,因为图片的高度会设置包裹它的view的高度。

    【讨论】:

    • 已编辑,这是一个错字对不起:P 您是否尝试过使用拉伸的图像?由于某种原因,在执行此代码时水平拉伸它,而不是垂直拉伸。出于测试目的,我将此代码放在 UIViewController 的 viewDidLoad: 中 - 这可能是个问题吗?
    • 我相信背景在高度上会根据您的图像进行调整,对不起,您的最后一行让我感到困惑,我知道 Bar 是水平拉伸而不是垂直拉伸的,那么我认为您只需要水平拉紧。不是没有垂直拉伸的图像。
    • 啊,该死的。好吧,似乎我注定要在这里 - 我不确定是否有一种方法可以扩展垂直高度。我试图提取搜索栏的 UITextField 子视图并调整其框架,但这似乎不起作用。
    • 我不知道你到底想要什么,但你可以自定义一个视图来调整你的提议,或者你可以将你的图像调整到你想要的高度......
    • 我最终只是将图像调整到所需的高度,因为它不会垂直拉伸图像