IOS改变UISearchBar中搜索框的高度_IOS

一、系统的searchBar
1、UISearchBar的中子控件及其布局
UIView(直接子控件) frame 等于 searchBar的bounds,view的子控件及其布局

  • UISearchBarBackground(间接子控件) frame 等于searchBar的bounds
  • UISearchBarTextField(间接子控件) frame.origin等于(8.0, 6.0),即不等于searchBar的bounds

2、改变searchBar的frame只会影响其中搜索框的宽度,不会影响其高度,原因如下:

  • 系统searchBar中的UISearchBarTextField的高度默认固定为28
  • 左右边距固定为8,上下边距是父控件view的高度减去28除以2

二、改变UISearchBar的高度
1、方案
重写UISearchBar的子类(IDSearchBar),重新布局UISearchBar子控件的布局
增加成员属性contentInset,控制UISearchBarTextField距离父控件的边距

  • 若用户没有设置contentInset,则计算出默认的contentInset
  • 若用户设置了contentInset,则根据最新的contentInset布局UISearchBarTextField

2、具体实现
重写UISearchBar的子类

class IDSearchBar: UISearchBar {

}

增加成员属性contentInset(可选类型),控制UISearchBarTextField距离父控件的边距,监听其值的改变,重新布局searchBar子控件的布局

var contentInset: UIEdgeInsets? {
  didSet {
    self.layoutSubviews()
  }
}

重写layoutSubviews()布局searchBar的子控件

override func layoutSubviews() {
  super.layoutSubviews()

  // view是searchBar中的唯一的直接子控件
  for view in self.subviews {
    // UISearchBarBackground与UISearchBarTextField是searchBar的简介子控件
    for subview in view.subviews {

      // 找到UISearchBarTextField
      if subview.isKindOfClass(UITextField.classForCoder()) {

        if let textFieldContentInset = contentInset { // 若contentInset被赋值
          // 根据contentInset改变UISearchBarTextField的布局
          subview.frame = CGRect(x: textFieldContentInset.left, y: textFieldContentInset.top, width: self.bounds.width - textFieldContentInset.left - textFieldContentInset.right, height: self.bounds.height - textFieldContentInset.top - textFieldContentInset.bottom)
        } else { // 若contentSet未被赋值
          // 设置UISearchBar中UISearchBarTextField的默认边距
          let top: CGFloat = (self.bounds.height - 28.0) / 2.0
          let bottom: CGFloat = top
          let left: CGFloat = 8.0
          let right: CGFloat = left
          contentInset = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)
        }
      }
    }
  }
}

三、IDSearchBar使用示例
1、未设置contentInset
设置searchBar的frame

searchBar.frame = CGRect(x: 80, y: 100, width: 200, height: 40)

效果如图

2、设置contentInset
设置searchBar的frame

searchBar.frame = CGRect(x: 80, y: 100, width: 200, height: 40)

设置searchBar的contentInset

// 设置contentInset
searchBar.contentInset = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8)

效果如图

四、IDSearchBar的设计原则
1、注意

  • UISearchBar默认是有自己默认的布局方式的
  • 设计IDSearchBar旨在改变searBar中搜索框的高度,但是可能会有改变宽的的需求

2、设计原则

  • 在没有改变searchBar中搜索框的高度的需求时,需要使用UISearchBar的默认布局
  • 若需要改变searchBar中搜索框的高度的需求时,需要按照需求来改变UISearchBar的布局
  • 为了增加可控性,在IDSearchBar中增加成员属性contentInset来控制IDSearchBar的内边距

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios
, 高度
搜索框
uisearchbar搜索事件、uisearchbar 搜索按钮、uisearchbar修改高度、uisearchbar高度、uisearchbar键盘搜索,以便于您获取更多的相关知识。

时间: 2024-12-31 02:36:55

IOS改变UISearchBar中搜索框的高度_IOS的相关文章

win7系统开始菜单中搜索框不见了怎么办

  win7系统开始菜单中搜索框不见了怎么办         首先打开控制面板,点击程序--打开或关闭windows功能. 接着在windows功能的窗口中找到并勾选windows search的选项,点击确定即可. windows7教程 windows8教程 windows10教程

win7开始菜单中搜索框消失了怎么找回

  默认情况下,点击Windows 7开始菜单后,用户就可以通过"搜索程序和文件"(也就是windows xp系统下,大家习惯上称之为"搜索框"的位置)框搜索文件或直接调用系统组件.但是有人发现它在安装某软件并重启系统后,开始菜单处的"搜索框"不见了. 不管是找软件,用命令打开什么东西,都是通过这个功能,没有它真心非常不习惯,而如果没有了它我们要这么样才能把它找回呢? 1.搜索框没了的图片: 2.出现这个问题的原因: 很多时候我们按照了某些软件,

Windows 7开始菜单中搜索框和文件夹中搜索框功能有什么区别呢

    一样的搜索框,放到不同位置,就带上不同的搜索范围.这让才上手的用户变得不太适应,甚至有些顾客觉得windows7的搜索不好用.但是仔细查看一下,发现开始菜单中的搜索框和文件夹中的搜索框,还是有区别的.   同样的搜索框的模样,但开始菜单中的搜索框的职责并不是搜索整个硬盘,而是兼具搜索:windows文件夹.program file文件夹.path环境变量指向的文件夹.libraries.run历史里面搜索文件,甚至可以接受"控制面板命令".充当运行对话框的作用!所以说,这里的搜

使用UItableview在iOS应用开发中实现好友列表功能_IOS

基本实现一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController 复制代码 代码如下: //  YYViewController.h //  02-QQ好友列表(基本数据的加载) // //  Created by apple on 14-5-31. //  Copyright (c) 2014年 itcase. All rights reserved. // #import <UIKit/UIKit.h> @interface YYV

详解iOS App开发中Cookie的管理方法_IOS

一.何为Cookie Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息.Cookie中的字段与意义由服务端进行定义.例如,当用户在某个网站进行了登录操作后,服务端会将Cookie信息返回给终端,终端会将这些信息进行保存,在下一次再次访问这个网站时,终端会将保存的Cookie信息一并发送到服务端,服务端根据Cookie信息是否有效来判断此用户是否可以自动登录. 二.iOS中进行Cookie管理的两个类 iOS中进行HTTP网络请求Cookie管理主要由两个类负责,一个类是NSHTT

以代码实例总结iOS应用开发中数据的存储方式_IOS

ios数据存储包括以下几种存储机制: 属性列表 对象归档 SQLite3 CoreData AppSettings 普通文件存储 1.属性列表 复制代码 代码如下: //  //  Persistence1ViewController.h  //  Persistence1  //  //  Created by liu lavy on 11-10-3.  //  Copyright 2011 __MyCompanyName__. All rights reserved.  //    #imp

详解iOS使用Keychain中的kSecClassGenericPassword存储数据_IOS

iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌.苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等.它是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的.模拟器下keychain文件路径:~/Library/Application Support/iPhone Simulator/4.3/Library/Keychains ke

ios动态设置lbl文字标签的高度_IOS

复制代码 代码如下:  txtlbl.font = [UIFont boldSystemFontOfSize:14.0f];     txtlbl.numberOfLines = 0;  NSString *str = @"        阿方决定设立科技特网络离开电视剧分w额两个大陆高科技了了不见了日i倒计时离开我说老师肯德基弗兰克萨江东父老将费德勒说阿方决定设立科技特网络离开电视剧分w额两个大陆高科技了了不见了日i倒计时离开我立科说老师肯德基弗兰克萨江东父老将费德勒说";    C

如何去除IE 8中的搜索框

  有人发现IE 8浏览器中搜索框很多余,基本上用不到,影响体现.下面就让小编介绍如何剔除它. 1.使用快捷键组合"windows+r"打开运行,在框内输入"gpedit.msc",回车启动系统组策略编辑器. 2.在左边的窗口中以此展开"计算机配置"→"管理模板"→"Windows 组件"→"Internet Explorer" . 3.然后再右边的窗口中找到"阻止显示Inte