从零开始构建基于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开发的道路上更进一步。
热门推荐
玉溪迎来荣耀时刻:云南玉昆夺得2024中甲冠军,历史性时刻见证足球力量
人性与社会冲突——《那些野兽》
为什么不能头朝南睡觉(你知道朝向哪个方向睡觉更好吗?)
从地球到超星系团:宇宙结构与大脑神经元的惊人相似性
罗马尼亚和保加利亚加入申根区,但仅限海空
国源科技的波动:从利润下滑到市场份额提升的全景分析
阿拉伯数字书写布局在不同文化中的差异
2025年最受欢迎的五款免费放置养成手游推荐
墙面挂纤维网施工顺序及网格带刮腻子的正确使用方法
股权投资基金基础知识
2024年青岛楼市大事件!
《名侦探柯南》漫画2024年喜提三项纪录,青山老贼还是赶紧完结吧
毛相林:在田野上书写履职答卷
诗词赏析:欲买桂花同载酒,终不似,少年游。
揭密橄榄油卸妆:为何它是您脸部清洁和肌肤保养的绝佳选择
用Excel插入自定义函数的多种方法
指向真实问题解决的跨学科学习
近视眼怎么纠正视力
王羲之行书魅力引众多研究,《圣教序》笔法、结构值得收藏
短剧编剧真能月入十万?
毛相林:当起讲解员 讲述重庆下庄村修路的故事
金属锌价格的影响因素是什么?这些因素如何相互作用影响价格?
新野的风云人物——刘备屯兵时期的人才收获
物物而不物于物,念念而不念于念
卷面75分,查分却显示81分!今年开始,四川高考计分方式变了
便捷出行指南:珠海至海南高效交通方式一览
如何更改金融投资绑定的手机号码?这种操作流程有哪些注意事项?
装修开工红包礼仪及注意事项
外媒:EUV光刻机的情况彻底反转了
向“新”而行 南京地铁推动新质生产力行稳“智”远