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

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. Development of Intel chipsets interconnection

    http://en.wikipedia.org/wiki/Chipset Chipset From Wikipedia, the free encyclopedia     A chipset is ...

  2. vim note (1)

    'vim' go into the vim mode 'i' 'a' 's'    is means insert mode 'v' is means visual mode 'esc' is mea ...

  3. Js两种post方式(转)

    第一种提交post的方式是传统方式,判断浏览器进行post请求. <SCRIPT stype=text/javascript> var xmlobj; //定义XMLHttpRequest ...

  4. Nova虚拟机启动提示libvirtError

    OpenStack自动化安装基本折腾完毕,装一次大概也就10分钟,但是装完后今天我的虚拟机起不来,经过查找log发 现如下图提示: 已经到这里,说明已经过了nova-sheduler那一关,跟踪一下代 ...

  5. C++类中static修饰的函数的使用

    //在C++中应该养成习惯:只用静态成员函数引用静态成员数据,而不引用非静态成员数据 #include <iostream>using namespace std;class st_inf ...

  6. 杭电 1596 find the safest road (最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=1596 这道题目与杭电2544最短路的思想是一样的.仅仅只是是把+改成了*,输入输出有些不一样而已. find t ...

  7. CentOS笔记-用户和用户组管理

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 1.添加新的用户账号使用useradd命令,其语法如下 ...

  8. 通过反射获取java nio Direct Memory 的最大值和已使用值

    (ps:jdk1.7及之后可通过MBean获取这两个值)

  9. Java 网络处理(net io URL 等)

    1. URL 类 URL 类的两个重要方法: openStream():打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream. URL url = new URL(" ...

  10. [SHOI 2009] 会场预约

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2028 [算法] 直接用std :: set维护即可 时间复杂度 : O(NlogN) ...