服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - IOS改变UISearchBar中搜索框的高度

IOS改变UISearchBar中搜索框的高度

2021-01-04 18:04世俗孤岛 IOS

这篇文章主要介绍了IOS改变UISearchBar中搜索框的高度的相关资料,需要的朋友可以参考下

一、系统的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的子类

?
1
2
3
class idsearchbar: uisearchbar {
 
}

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

?
1
2
3
4
5
var contentinset: uiedgeinsets? {
  didset {
    self.layoutsubviews()
  }
}

重写layoutsubviews()布局searchbar的子控件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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

?
1
searchbar.frame = cgrect(x: 80, y: 100, width: 200, height: 40)

效果如图

IOS改变UISearchBar中搜索框的高度

2、设置contentinset
设置searchbar的frame

?
1
searchbar.frame = cgrect(x: 80, y: 100, width: 200, height: 40)

设置searchbar的contentinset

?
1
2
// 设置contentinset
searchbar.contentinset = uiedgeinsets(top: 0, left: 8, bottom: 0, right: 8)

效果如图

IOS改变UISearchBar中搜索框的高度

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

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

2、设计原则

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

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

延伸 · 阅读

精彩推荐
  • IOS谈一谈iOS单例模式

    谈一谈iOS单例模式

    这篇文章主要和大家谈一谈iOS中的单例模式,单例模式是一种常用的软件设计模式,想要深入了解iOS单例模式的朋友可以参考一下...

    彭盛凇11872021-01-19
  • IOSiOS10 Xcode8适配7个常见问题汇总

    iOS10 Xcode8适配7个常见问题汇总

    这篇文章主要为大家详细汇总了iOS10 Xcode8适配7个常见问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    索马里猫10332021-02-01
  • IOSiOS逆向教程之logify跟踪方法的调用

    iOS逆向教程之logify跟踪方法的调用

    这篇文章主要给大家介绍了关于iOS逆向教程之logify跟踪方法调用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    Mr.Guo11472021-04-28
  • IOSxcode8提交ipa失败无法构建版本问题的解决方案

    xcode8提交ipa失败无法构建版本问题的解决方案

    xcode升级到xcode8后发现构建不了新的版本。怎么解决呢?下面小编给大家带来了xcode8提交ipa失败无法构建版本问题的解决方案,非常不错,一起看看吧...

    Cinna丶7542021-02-03
  • IOSIOS网络请求之AFNetWorking 3.x 使用详情

    IOS网络请求之AFNetWorking 3.x 使用详情

    本篇文章主要介绍了IOS网络请求之AFNetWorking 3.x 使用详情,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    总李写代码6892021-03-04
  • IOSiOS APP实现微信H5支付示例总结

    iOS APP实现微信H5支付示例总结

    这篇文章主要介绍了iOS APP实现微信H5支付示例总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    一张小A11332021-06-01
  • IOSiOS中时间与时间戳的相互转化实例代码

    iOS中时间与时间戳的相互转化实例代码

    这篇文章主要介绍了iOS中时间与时间戳的相互转化实例代码,非常具有实用价值,需要的朋友可以参考下。...

    张无忌!4812021-03-09
  • IOSiOS常见的几个修饰词深入讲解

    iOS常见的几个修饰词深入讲解

    这篇文章主要给大家介绍了关于iOS常见的几个修饰词的相关资料,iOS修饰词包括assign、weak、strong、retain、copy、nonatomic、atomic、readonly、readwrite,文中通过示...

    郡王丶千夜7422021-05-10