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

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. iOS Webview 与 app交互

    有时候我们在内嵌的webview中希望点击一个链接之后,触发iOS原生事件,而不是webview内页面跳转(因为webview的跳转很生硬,而ajax+js模拟则不如原生segue平滑). 有时候我们 ...

  2. jk_proxy实现apache+tomcat负载均衡

    Apache + tomcat实现server集群 主要參照:http://blog.csdn.net/welun521/article/details/4169879 watermark/2/tex ...

  3. 图像处理之 opencv 学习---矩阵的操作

    OpenCV的一些操作,如生成随机矩阵,高斯矩阵,矩阵相乘之类的 /*功能:说明矩阵的一些操作方法*/#include "cv.h"//该头文件包含了#include " ...

  4. Hadoop如何计算map数和reduce数

    阅读本文可以带着下面问题: 1.map和reduce的数量过多会导致什么情况? 2.Reduce可以通过什么设置来增加任务个数? 3.一个task的map数量由谁来决定? 4.一个task的reduc ...

  5. 常用的sql命令

    1 mysql创建数据库 create database [database name]; 2 创建表 create table [table name]([first column name] [f ...

  6. SignatureDoesNotMatch REST接口 在任何时间、任何地点、任何互联网设备上 在Header中包含签名

    PutObject_关于Object操作_API 参考_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/31978.html OSS API ...

  7. A Practical Introduction to Blockchain with Python

    A Practical Introduction to Blockchain with Python // Adil Moujahid // Data Analytics and more http: ...

  8. C++11 条件变量

    C++11中的条件变量提供了用户等待的同步机制,在同步队列的应用中有很大的便利. 简单同步队列代码如下(SimpleSyncQueue.h): #ifndef SIMPLESYNCQUEUE_H #d ...

  9. linux下自动创建设备文件节点---class

    在驱动模块初始化函数中实现设备节点的自动创建 我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的 ...

  10. HDU6028:Forgiveness(TLE ing,占位)

    Problem Description Little Q is now checking whether string A matches B. Two strings are considered ...