iOS 将navigationItem.titleView设置为自定义UISearchBar (Ficow实例讲解)
这篇文章可以解决以下问题:
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实例讲解)的更多相关文章
- Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...
- 实例讲解Oracle数据库设置默认表空间问题
实例讲解Oracle数据库设置默认表空间问题 实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在O ...
- navigationItem的设置和titleView的设置
设置导航栏中间的标题 self.navigationItem.title = @"title"; 设置导航栏的主题颜色 self.navigationBar.barTintColo ...
- iOS 如何自定义UISearchBar 中textField的高度
iOS 如何自定义UISearchBar 中textField的高度 只需设置下边的方法就可以 [_searchBar setSearchFieldBackgroundImage:[UIImage i ...
- iOS中navigationItem的titleView如何居中
开发过程中,发现titleview很难居中,通过各种尝试终于找到了解决方法. 首先清楚你个概念: leftBarButtonItem,导航条中左侧button. rightBarButtonItem, ...
- iOS8 自定义navigationItem.titleView
navigationBar其实有三个子视图,leftBarButtonItem,rightBarButtonItem,以及titleView.前两种的自定义请参考http://www.cnblogs. ...
- 设置导航栏 self.navigationItem.titleView 居中
喜欢交朋友的加:微信号 dwjluck2013-(void)viewDidLayoutSubviews{ [self setDisplayCustomTitleText:@"每日头条&quo ...
- IOS Custom NavigationItem --写titleView
//先自己写一个titleView UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];//all ...
- 新浪微博客户端(5)-自定义UISearchBar
iOS自带的UISearchBar有很多限制,我们可以使用UITextField做出一个类似于SearchBar的效果. //===================================== ...
随机推荐
- Redis相关知识
Redis 存储的五种 字符串类型:string 一个String类型的value最大可以存储512M String是最常用的一种数据类型,普通的key/value存储. 散列类型: hash 键值 ...
- windows下使用F2PY编译fortran文件的问题
在windo系统下F2PY不支持gcc+gfortran的组合,解决的办法: 1.安装mingw和msys,在msys环境下使用F2PY调用gcc+gfortran进行编译 2.放弃F2PY,直接gf ...
- VUE 之 路由 VueRouter
1.VueRouter的安装 1.1.https://unpkg.com/vue-router/dist/vue-router.js下载安装. 1.2.<script src="./s ...
- 将线上服务器生成的日志信息实时导入kafka,采用agent和collector分层传输,app的数据通过thrift传给agent,agent通过avro sink将数据发给collector,collector将数据汇集后,发送给kafka
记flume部署过程中遇到的问题以及解决方法(持续更新) - CSDN博客 https://blog.csdn.net/lijinqi1987/article/details/77449889 现将调 ...
- kafka 和 zookeeper 常用命令记录
启动zookeeper zkServer.sh start 启动kafka服务器 kafka-server-start.sh /software/kafka_2.10-0.10.2.1/config/ ...
- char* strcpy( char* dest, const char* src ), int binary_search(int *arr, int key, int n), 可能的实现
#include <stdio.h> char* stringCopy( char* dest, const char* src ) { size_t i = 0; while (dest ...
- JVM内存分配策略、各个代区、FullGC/MinorGC
主要讨论默认的Serial/Serial Old内存分配: 一.几种分配方案 1. 对象优先在Eden分配: 一般情况下,对象会在新生代的Eden区分配,Eden区没有足够空间时,虚拟机会 发起一次 ...
- POJ2976 Dropping tests —— 01分数规划 二分法
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
- YTU 2425: C语言习题 输出月份
2425: C语言习题 输出月份 时间限制: 1 Sec 内存限制: 128 MB 提交: 476 解决: 287 题目描述 编写一程序,输入月份号,输出该月的英文月名.例如,输入3,则输出Mar ...
- javascript 无刷新上传图片之原理
刚开始我认为可以像ajax 那样获取到数据然后通过ajax 发送请求,后来发现浏览器为了客户端的安全默认并没有给javascript 这个权限.这个方法当然是行不同了.我看了好像开源的上传图片原理,当 ...