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

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. ORA-07445 第一參数为:kkqljpmpr

      在版本号11.2.0.1.0上,在pl/sql developer中运行一条SQL会导致连接中断,这样的错误要到trace文件夹下找到错误日志文件,再定位.查了一下资料,是这个版本号的bug. D ...

  2. Volatile的特征

    Volatile的特征: A.禁止指令重排(有例外)原理: 内存屏障/内存栅栏B.可见性  原理:happens-before 对于volatile修饰的变量,jvm虚拟机只是保证从主内存加载到线程工 ...

  3. openwrt: sysupgrade

    sysupgrade 用法: sysupgrade [...] sysupgrade [-q] [-i] 升级选项: -d 重启前等待 delay 秒 -f 从 .tar.gz (文件或链接) 中恢复 ...

  4. C++类中使用new及delete小例子

    //默认复制构造函数的不足//尽管有默认的复制构造函数来解决一般对象与对象之间的初始化问题, 但是在有些情况下我们必须手动显式的去定义复制构造函数, 例如: #include <iostream ...

  5. adb问题整理

    1.开启了两个adb,关掉一个,重启eclipse既可 java.io.IOException: 您的主机中的软件中止了一个已建立的连接. at sun.nio.ch.SocketDispatcher ...

  6. POJ 1737 Connected Graph(高精度+DP递推)

    题面 \(solution:\) 首先做个推销:带负数的压位高精度(加减乘+读写) 然后:由 \(N\) 个节点组成的无向图的总数为: \(2^{N*(N-1)/2}\) (也就是说这个图总共有 \( ...

  7. I2S

    音频数据传输而制定: Inter—IC Sound : 单线 时钟和数据一条线,时分复用: 标准的I2S总线电缆是由3根串行导线组成的:1根是时分多路复用(简称TDM)数据线:1根是字选择线:1根是时 ...

  8. vue 移动端开发

    1.vue开发中的路由: 关于require 与import 的区别 2.vue中的mock数据 3.

  9. ES6的相关新属性

    ES6  引入了类这个概念. 1.class……extends es6中的class与es5 中的function差不多: class Student extends People , student ...

  10. 【Selenium】测试流程和框架

    流程: 分析自动化测试需求→制定自动化测试计划→设计自动化测试用例→搭建环境→编写脚本→分析结果→维护脚本 框架: 线性测试.模块化测试.数据驱动.关键字驱动