一、系统的searchbar
1、uisearchbar的中子控件及其布局
uiview(直接子控件) frame 等于 searchbar的bounds,view的子控件及其布局
- uisearchbarbackground(间接子控件) frame 等于searchbar的bounds
- uisearchbartextfield(间接子控件) frame.origin等于(8.0, 6.0),即不等于searchbar的bounds
2、改变searchbar的frame只会影响其中搜索框的宽度,不会影响其高度,原因如下:
二、改变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)
|
效果如图
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)
|
效果如图
四、idsearchbar的设计原则
1、注意
2、设计原则
- 在没有改变searchbar中搜索框的高度的需求时,需要使用uisearchbar的默认布局
- 若需要改变searchbar中搜索框的高度的需求时,需要按照需求来改变uisearchbar的布局
- 为了增加可控性,在idsearchbar中增加成员属性contentinset来控制idsearchbar的内边距
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关文章
猜你喜欢
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
简维科技企业建站:从构思到上线,完整的网站建设流程是怎样的?
2025-06-04 24 -
2025-05-29 73
-
2025-05-25 68
-
2025-05-27 67
-
2025-05-27 40
热门评论