从零开始构建基于Frame布局的iOS应用
创作时间:
作者:
@小白创作中心
从零开始构建基于Frame布局的iOS应用
引用
CSDN
等
8
来源
1.
https://blog.csdn.net/weixin_28746457/article/details/144256501
2.
https://blog.csdn.net/hthutao/article/details/134274001
3.
https://blog.csdn.net/u010713935/article/details/54617983
4.
https://blog.csdn.net/liuxinzhongliubin/article/details/137080613
5.
https://blog.csdn.net/MinggeQingchun/article/details/102677233
6.
https://www.cnblogs.com/xiejw/p/5136667.html
7.
https://tech.meituan.com/2017/02/24/the-future-of-layout.html
8.
https://www.cnblogs.com/LuckyVan/p/9665552.html
在iOS应用开发中,Frame布局虽然古老却依然强大。尽管Auto Layout和Masonry等现代工具逐渐流行,但掌握Frame布局仍然是每个开发者的基本功。本文将带你从零开始,一步步构建基于Frame布局的应用程序,让你深入了解视图的位置和大小控制,为你的iOS开发之路打下坚实的基础。
01
Frame布局基础
在iOS开发中,Frame布局通过手动设置视图的origin
和size
来确定位置,适用于早期设备适配简单的情况。需要指出Frame布局是绝对定位,性能较好但适配复杂。
CGRect结构体
CGRect
是Cocoa框架中用于表示二维矩形的结构体,包含四个主要属性:
struct CGRect {
var origin: CGPoint // (x, y) 对角点位置
var size: CGSize // width 和 height
}
struct CGPoint {
var x: CGFloat
var y: CGFloat
}
struct CGSize {
var width: CGFloat
var height: CGFloat
}
设置视图位置和大小
通过编程方式直接设置frame的值来控制视图的布局。例如,在iOS开发中,可以通过以下方式设置一个视图的位置和大小:
let view = UIView()
view.frame = CGRect(x: 10, y: 20, width: 100, height: 100)
self.view.addSubview(view)
这行代码将视图的左上角放置在距离父视图左边缘10个单位,上边缘20个单位的位置,并将视图的宽度和高度设置为100单位。
02
屏幕适配技巧
使用Autoresizing实现简单适配
随着iOS的发展,苹果公司添加了Autoresizing功能,用来约束父子控件之间的关系,以父控件作为参照进行设置。
let blueView = UIView()
blueView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
blueView.backgroundColor = .blue
self.view.addSubview(blueView)
let redView = UIView()
let redViewH: CGFloat = 30
redView.frame = CGRect(x: 0, y: 170, width: 200, height: redViewH)
redView.backgroundColor = .red
blueView.addSubview(redView)
// 设置自动调整属性
redView.autoresizingMask = [.flexibleTopMargin, .flexibleWidth, .flexibleHeight]
结合Auto Layout进行复杂界面适配
对于复杂界面,可以结合使用Auto Layout与Frame布局来实现更精细的控制。
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false // 禁用自动转换frame到约束
// 使用Auto Layout定义约束
view.widthAnchor.constraint(equalToConstant: 100).isActive = true
view.heightAnchor.constraint(equalToConstant: 100).isActive = true
// 适当情况下使用frame进行微调
view.frame.origin.y = 20
这种方法结合了CGRect(frame)的直接控制和Auto Layout的灵活适应性,使布局更加符合复杂界面的要求。
03
最佳实践
性能对比
- Frame布局:直接操作视图坐标,性能最佳(O(n) 复杂度),但代码维护成本高;
- AutoLayout:iOS 12 前性能较差(O(n²) 复杂度),iOS 12+ 优化后性能接近 Frame 布局。
开发建议
- 当界面简单且设备适配要求不高时,可以使用Frame布局
- 对于复杂界面或需要高度自适应的场景,推荐使用Auto Layout
- 在ViewDidLoad中使用自动布局时,需要在ViewDidLayoutSubViews中获取更新后的frame
注意事项
- Frame布局在iOS12前性能优于Auto Layout
- 在ViewDidLoad中使用自动布局时,需要在ViewDidLayoutSubViews中获取更新后的frame
通过以上内容,相信你已经掌握了Frame布局的核心知识。在实际开发中,Frame布局和Auto Layout各有优劣,选择合适的工具才能事半功倍。希望这篇文章能帮助你在iOS开发的道路上更进一步。
热门推荐
张立召团队揭秘禄丰古猿牙齿奥秘:釉质厚度暗示独特食性适应
禄丰古猿研究新突破:揭秘远古人类的生活方式与演化之谜
你家断桥铝门窗漏风吗?试试这些小妙招!
断桥铝窗户漏风?装修达人教你几招搞定!
武警工程大学:信息化训练设施助力战斗力提升
揭秘!武警工程大学体能训练秘籍
陕西苹果产地大揭秘:哪里的苹果最好吃?
陕西省苹果产业深度分析:现状、规模与发展趋势
感冒物理疗法有哪些
手麻手痛的病因分析:神经、筋膜和循环
手麻快速解决
硬币收藏:探寻中国硬币的历史韵味与珍贵价值
老版5角梅花硬币含“黄金”?银行职员透露实情,你家收藏了吗?
MySQL数据库管理员必知:UTF-8汉字存储技巧
MySQL汉字存储优化技巧大揭秘!
马桶漏水的原因及维修方法
办公族如何避免视力疲劳,提升用眼效率?
职场人必看:戒烟告别头晕烦恼
头晕是戒烟成功的信号?这些方法帮你轻松应对!
2024年陕西多种特色农产品“香飘海外”
铜川宜君:科技赋能 推动苹果产业优化升级
果产业:“甘味”苹果,“红”遍陇原——甘肃苹果产业发展综述
礼泉县荣获陕西现代农业全产业链典型县,苹果产业再创辉煌
北大、清华2024年新生数据:北大特殊招生占比过半,清华自强计划增幅达66%
清北综合营夏令营冬令营对强基计划有何作用?清华北大升学方式盘点
学渣如何逆袭进北大?
美国拟取消800美元进口免税政策,备货海外仓或成应对之法?
乘坐大客车出行,安全带务必系好!
一分钟!让骗子打不通你的电话!
国内市场中增强现实(AR)技术的应用现状与深度分析