从零开始构建基于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开发的道路上更进一步。
热门推荐
叮!你有一份考前心理调适指南待查收~
法语水平TNF考试大纲
如何通过正规渠道投诉交警?交警投诉的流程有哪些关键步骤?
2025南京家装焕新补贴申请材料下载
半地下室可以住人吗?北京半地下室允许住人吗
如何准备新锐之星人才评估?
杨木板材优缺点全解析:选购指南与使用建议
如何高效备考金融财会类考试 | 金融财会类考试的备考策略与技巧
“洋”教授阳和平从河南秋收看中国农业巨变,被一碗白米饭征服味蕾
胃寒不能吃哪些食物?专家建议:六类食物需谨慎
仓库数据管理指南:10个关键绩效指标详解
那些银幕上的独特春节:电影与春节文化的交融
南京个体工商户注销流程全攻略
血液循环差的人,一般身体有这5个异常!
如何高效将PDF文件转换为Word文档的实用方法与注意事项
电脑无法开机但风扇在转且指示灯亮,屏幕无显示怎么办?排查技巧分享!
动名词和现在分词都是动词ing形式,但是叫法又不一样,如何区分判断?赶紧收藏
通道与选区,Photoshop中不可或缺的核心功能详解
我国药品信息化追溯体系建设总体思路
盐酸普萘洛尔片使用多久会有疗效
如何分析主力资金的建仓成本?这些分析方法有哪些实际应用?
破除对黄金的两大误解,重新认识配置价值
Win10重启3次进不了安全模式怎么办(解决方法及步骤详解)
特殊工种可以提前退休,电工符合条件吗?
股票压单说明什么?股票压单对市场趋势有何影响?
“歆”字探源:从音乐欣赏到羡慕之情
叫娃起床,输出全靠吼?教你8招,让娃告别起床气
八字五行多少以上算旺 怎么看八字火旺不旺
吃洋姜有什么好处和功效
相对免赔额怎么计算