这篇文章可以解决以下问题:

1.将searchBar设置为titleView后,无法调整位置的问题 ;

2.searchBar的背景色无法设置为透明色的问题;

3.searchBar输入框内用户输入的字体的颜色无法设置为其他颜色的问题;

首先看一下完成后的效果吧!

背景透明,位置偏左,实际输入的字为深灰色

OK,开始动手做!

以下示例代码的语言是Swift 3。

首先设置searchBar的配色:

searchView = UISearchBar.init(frame: .zero)
searchView.alpha = 0.7
searchView.tintColor = UIColor.lightGray // 光标颜色
searchView.backgroundColor = UIColor.clear // 背景色
searchView.placeholder = "搜索你感兴趣的问题"
searchView.delegate = self for subView in self.searchView.subviews{
for sSubView in subView.subviews{
// 移除背景,防止出现黑线
if sSubView.isKind(of: NSClassFromString("UISearchBarBackground")!){
sSubView.removeFromSuperview()
}
// 设置字体颜色
if sSubView.isKind(of: UITextField.self){
let tf = sSubView as! UITextField
tf.textColor = UIColor.darkGray
}
}
}

然后设置searchBar的位置:

// 使用一个View来包裹searchBar,即可实现searchBar位置偏移
// 否则只能固定在导航栏的中间,而且可能会出现闪烁问题
let frame = CGRect.init(x: , y: , width: SCREEN_WIDTH - , height: )
let containerView = UIView.init(frame: frame)
containerView.addSubview(self.searchView)
self.navigationItem.titleView = containerView
self.searchView.frame = CGRect.init(x: -, y: , width: SCREEN_WIDTH - , height: )

可以看到下图中红色的就是这个containerView了,

想要改变搜索框的位置,就需要设置搜索框的frame

建议:

在自定义控件的时候,

推荐你把各个部分设置成易区分的颜色,

这样可以很方便观察控件的大小、位置等等。

另外我这个应用兼容的最低版本是iOS8的,

所以没有使用iOS9之后才支持的appearanceWhenContainedIn方法。

参考资料:

https://stackoverflow.com/questions/10718931/change-text-color-of-search-bar-ios

http://www.gowhich.com/blog/149

http://blog.csdn.net/peanut_/article/details/23562753


Ficow原创,转载请注明出处:http://www.cnblogs.com/ficow/p/7256545.html

iOS 将navigationItem.titleView设置为自定义UISearchBar (Ficow实例讲解)的更多相关文章

  1. Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解

    关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...

  2. 实例讲解Oracle数据库设置默认表空间问题

    实例讲解Oracle数据库设置默认表空间问题   实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在O ...

  3. navigationItem的设置和titleView的设置

    设置导航栏中间的标题 self.navigationItem.title = @"title"; 设置导航栏的主题颜色 self.navigationBar.barTintColo ...

  4. iOS 如何自定义UISearchBar 中textField的高度

    iOS 如何自定义UISearchBar 中textField的高度 只需设置下边的方法就可以 [_searchBar setSearchFieldBackgroundImage:[UIImage i ...

  5. iOS中navigationItem的titleView如何居中

    开发过程中,发现titleview很难居中,通过各种尝试终于找到了解决方法. 首先清楚你个概念: leftBarButtonItem,导航条中左侧button. rightBarButtonItem, ...

  6. iOS8 自定义navigationItem.titleView

    navigationBar其实有三个子视图,leftBarButtonItem,rightBarButtonItem,以及titleView.前两种的自定义请参考http://www.cnblogs. ...

  7. 设置导航栏 self.navigationItem.titleView 居中

    喜欢交朋友的加:微信号 dwjluck2013-(void)viewDidLayoutSubviews{ [self setDisplayCustomTitleText:@"每日头条&quo ...

  8. IOS Custom NavigationItem --写titleView

    //先自己写一个titleView UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];//all ...

  9. 新浪微博客户端(5)-自定义UISearchBar

    iOS自带的UISearchBar有很多限制,我们可以使用UITextField做出一个类似于SearchBar的效果. //===================================== ...

随机推荐

  1. HashMap底层原理以及与ConCurrentHashMap区别

    HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bu ...

  2. ARC机制之__strong具体解释

    ARC机制之__strong具体解释 __strong  解析: 默认情况下,一个指针都会使用 __strong 属性,表明这是一个强引用.这意味着,仅仅要引用存在,对象就不能被销毁.这是一种所期望的 ...

  3. WPF DataGrid 获取选中 一行 或者 多行

    WPF中DataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作 然而SelectedItem 与SelectedItems DataGrid的SelectionU ...

  4. string和int互相转化

    1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...

  5. eclipse 添加库

    Window ->Preferences ->Java ->Build Path ->User Libraries New,起个名字,如myLibrary add jars,添 ...

  6. hive impala C++ Java垃圾回收 Garbage Collection GC

    hive impala impala  推荐每个节点内存  2^7~2^8GB Impala与Hive的比较 - 文章 - 伯乐在线 http://blog.jobbole.com/43233/ &l ...

  7. C++设计模式之State模式

    这里有两个例子: 1.https://www.cnblogs.com/wanggary/archive/2011/04/21/2024117.html 2.https://www.cnblogs.co ...

  8. curl请求接口返回false,错误码60

    我讲一下我遇到的这个问题,是因为最近服务器加了https导致的,网上找到了答案,加上这句 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 就可以正常返 ...

  9. (linux)wake_lock机制

      Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作.wake_lock一般在关闭lcd.tp但 ...

  10. SDUT 3033 这题实在不知道起啥名好了(思维巧法)

    这题实在不知道起啥名好了 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 懒得想背景故事了,开门见山. 有一个长度为n的整数数列A ...