展开

关键词

iOS自动布局——Masonry详解

前言 UI布局整个前端体系里不可或缺的一环。代码的布局设计语言与用户视觉感受沟通的桥梁,不论看起来多么简单或是琐碎,但不得不承认,绝大部分软件开发的问题,都是界面问题。 更多的依靠相对位置。 所幸,iOS为我们提供自动布局的方法,来解决这一困境。 ? image.png 自动布局的基本理念 其实说到本质,和手动布局一样的。 对一个控件放在哪里,我们依然只关心的(x, y, width, height)。但手动布局的方式,一次性计算出这四个值,然后设置进去,完成布局。 但当父控件或屏幕发生变化时,子控件的计算就要重新来过,非常麻烦。 源码解读 Masonry的封装很有魅力,那么,我们可以简单来看一下,它是如何封装的。我们再仔细看一下Masonry的API会发现,我们直接在UIView上进行调用的。

41920

iOS自动布局——Masonry详解

代码的布局设计语言与用户视觉感受沟通的桥梁,不论看起来多么简单或是琐碎,但不得不承认,绝大部分软件开发的问题,都是界面问题。那么,如何高效的完成UI开发,也是软件行业一直在克服的问题。 更多的依靠相对位置。 所幸,iOS为我们提供自动布局的方法,来解决这一困境。 3.png 自动布局的基本理念 其实说到本质,和手动布局一样的。 对一个控件放在哪里,我们依然只关心的(x, y, width, height)。但手动布局的方式,一次性计算出这四个值,然后设置进去,完成布局。 但当父控件或屏幕发生变化时,子控件的计算就要重新来过,非常麻烦。 源码解读 Masonry的封装很有魅力,那么,我们可以简单来看一下,它是如何封装的。我们再仔细看一下Masonry的API会发现,我们直接在UIView上进行调用的。

2.2K80
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何把设计图自动转换为iOS代码? 在线等,挺急的!

    没有详实的数据统计来确认各个iOS开发者的日常开发中,MVC各个层面,具体的时间成本如何;单从个人角度来说, View布局的拆分与转换,占据了 70% 以上的时间.我们公司通常是按单个完整任务来拆分工作的 ,单个任务的MVC三层,都是应该由一个人独立完成.每次都把大把时间浪费在"画UI"上,真的感觉好无趣,好浪费生命;临时遇到产品经理改动需求,可能一个对方看似更加"合理"的改动,这边几乎要大动干戈! 想我对编程本身确实是感兴趣的,但是整天浪费时间在 UI上,真的感觉有点虚度光阴.所以说,在本不充裕的空闲里,一直在思考的一个命题就是: 如何实现 UI 的自动化与独立化. ,也更快捷些.在此期间,研究的一个重要话题就是如何实现Xib之间的嵌套复用,即在一个Xib上如何直接嵌入另一个Xib.乍听起来很简单,但是在亲身实践之后,才发现其难度.不是来吐槽的,个中曲折不再一一赘述 ,下面研究的成果: 上图,一个Xib模块,其中的色块部分,嵌套的另一个Xib模块.最终显示,色块会自动被对应的Xib模块替代.

    44060

    窗口结束不断循环的线程

    ,比如 “aaa.exe” 注意: 如果把方法放到类里,这里定义类的方法为静态方法,调用时直接类名.方法使用 另外解决方法: .net类库已经帮助我们实现了窗口的关闭,如果此窗口系统的主窗口,关闭此窗口即应该退出了整个应用程序 Application.Exit()方法终止所有线程上的消息循环,一般情况下,无论在什么地方调用此方法,程序就能退出。 (强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净退出) 2.Environment.Exit(0): 调用此方法,应用程序即强制退出。 (无论在主线程和其它线程,只要执行了这句,都可以把程序结束干净) ? 把放到窗口closed事件里。 在应用程序退出之前通过调用 Form.Close 或 Form.Dispose 来关闭窗口清除窗口的良好做法,但这需要您有意识去做。

    21941

    Swift:静态工厂方法

    UILabel.makeForTitle() private lazy var buyButton = UIButton.makeForBuying() } 如果我们想使API更加简约(Swift在很多方面都鼓励使用点语法以及如何缩短导入的 private lazy var buyButton = UIButton.buy } 当然,如果最终将参数添加到设置API中,则需要将其转换为方法——但是对于更简单的用例,这种方式使用静态计算属性可能不错的选择 就像用于视图一样,工厂方法为我们提供了非常干净的调用方式。 假设我们的应用程序中有一个User模型,其中包含给定用户具有什么样的权限,并且我们的许多测试都是基于当前用户的权限来验证我们的逻辑。 结论 Conclusion 使用静态工厂方法和属性来执行对象的设置可能一种将设置代码与实际逻辑清晰分开的好方法,可以启用漂亮的语法功能并简化编写干净的测试代码的过程。

    44610

    如何写出优质干净的代码

    当然,的意思几天,而不是几周。此外,干净的代码将帮助团队带来更多的开发人员,并同时帮助他们理解代码。简单说,代码越简洁就越容易解释,误解也就越少。 的确,编写和保持干净的代码并不意味着应该忽略任何改进的机会,认为应该始终对目前的做法保持可改进的态度,并努力寻找改进的机会。 即使让别人无法访问我们的代码,但我们自己也可能在将来又重新拾起这些代码。出于这些原因,让代码便于阅读和理解符合我们自己的利益的。那么如何实现呢? 最简单的方法使用空格。 另外,除了编写者,几乎没有人知道函数用来做什么的以及该如何使用它。有时就会遇到这些问题,在这方面做的很不好。 然后,有人提出了一个很好的建议:让每个函数或方法只执行一个任务。 另外,当我们决定做一些试验的时候,就应该尝试多次练习,应该花时间彻底做好。只有真正确信喜欢这种做法,并且对感到满意时,才应该去实施。而且决定这样做的时候,最好应用在所有的项目中。

    27220

    经验之谈:代码该怎样写才能干净整洁

    干净代码应该是优雅的:干净的代码应该易于阅读,阅读干净的代码会让你感到愉悦,应该让你认为「确实知道这里的代码在做什么」。 干净代码应该经常维护:我们需要花时间让保持简单有序,并适当关注代码的细节。 干净代码应该通过各种测试:会崩溃的代码肯定不是干净的! 最简单说,这从根本上意味着你应该致力于减少存在的重复代码的数量。(注意,这里说的「减少」而不是「消除」——有些情况下,重复的代码也并不是世界末日!) 对于代码维护来说,重复的代码可能一场噩梦。 另外,更麻烦的,我们希望把 API 的端点从「/user」改为「/users」。谢谢! 在开始编程之前,让我们先回顾一下。在这篇文章开头,曾经说过「干净的代码应该专一」(即做一件事,并把做好)。 如果开发者必须不断在许多文件/方法之间进行跳转才能进行简单的变更,那这样也会影响生产效率。 要有编写干净代码的意识,但是不要在项目的早期过多考虑。请确保你的代码能正常工作,并很好经过了测试。

    29430

    6个编写优质干净代码的技巧

    当然,的意思几天,而不是几周。此外,干净的代码将帮助团队带来更多的开发人员,并同时帮助他们理解代码。简单说,代码越简洁就越容易解释,误解也就越少。 的确,编写和保持干净的代码并不意味着应该忽略任何改进的机会,认为应该始终对目前的做法保持可改进的态度,并努力寻找改进的机会。 即使让别人无法访问我们的代码,但我们自己也可能在将来又重新拾起这些代码。出于这些原因,让代码便于阅读和理解符合我们自己的利益的。那么如何实现呢? 最简单的方法使用空格。 另外,除了编写者,几乎没有人知道函数用来做什么的以及该如何使用它。有时就会遇到这些问题,在这方面做的很不好。 然后,有人提出了一个很好的建议:让每个函数或方法只执行一个任务。 另外,当我们决定做一些试验的时候,就应该尝试多次练习,应该花时间彻底做好。只有真正确信喜欢这种做法,并且对感到满意时,才应该去实施。而且决定这样做的时候,最好应用在所有的项目中。

    292100

    不用祖传秘方 - 写好代码的几个小技巧

    喜欢写干净的代码,也希望的团队写出优良而干净的代码。问题在于,每个人对于 “干净的代码” 有不同的定义。 不管采取什么样的风格、范式和决策,都要始终如一。 此外还有一些较少关心的事情:使代码通用、强制使用设计模式、遵循已知的“正确方式”,以及不必要的性能优化 如何写出更好的代码? 以下现在如何写代码的方式,以及为何要这样写的理由: 零注释策略 注释会变得陈旧并由此增加干扰你理解代码的风险。并且,注释会让你觉得可以对一些本不应该存在的含糊代码做一些补偿。 如果诸如 “有时间的时候务必要将这里变得更快” 的注释必要的,那么就应该放在每个人都能看到的地方。 (如何什么时候被改变)了。

    13110

    Python猫荐书系列之三:《黑客与画家》(文末有彩蛋)

    不要被书中大量IT案例阻隔,事实上适合所有人阅读,让你重新思考要过什么样的生活,或如何尽快过上你想有的生活。——@大头绿豆 本来以为一本编程书,没想到竟然一本方方面面的哲学书。 当然,对于计算机编程思维与编程语言的哲学也有独到的见解,不明觉厉……——@莱斯基 读到了什么? 全书15章,可以粗略划分为三部分。 作者最主要的洞见就在于,通过设想100年后的编程语言,来思考今天如何设计、使用编程语言。 的判断,那些内核最小、最干净的编程语言才会存在于进化的主干上。 一种语言的内核设计得越小、越干净的生命力就越顽强。 在作者眼里,某些尽力提升计算机运行效率的行为过早优化、并不可取,相反,他提倡要尽力消耗硬件性能。 计算机程序在本质上一种描述性语言,“以书面形式记录计算应该如何解决你的问题”。那么,很明显进化的方向就应该是,用越少、越简单的描述来解决越多、越复杂的问题。

    26340

    36个助你成为专家需要掌握的JavaScript概念

    通过理解值类型和引用类型的概念,你将更好地理解变量如何分配值和内存引用的。 4、强制类型转换 这一概念主要解释了隐式和显式强制类型转换的区别。这是在用JavaScript时会出错的少数领域之一。 你应该知道这两者之间的区别以及语句如何计算的。这将允许你全面了解代码如何被构造成表达式和语句的。 你会注意到,你的大部分代码都是表达式,而相对而言,你使用的语句数量较少。 具有OOP背景的程序员应该熟悉这个新关键字。 要正确识别对象的类型,我们使用instanceOf操作符。简单说,检查一个对象是否另一个对象的实例。 这将帮助你理解对象如何相互继承。 到目前为止,这是对Promise的最简单、最清楚的解释。老实说,在做演示项目时学到Promise的概念的。 这让很难理解发生了什么,因为不知道Promise是什么。快进到现在。 由于网络上丰富的资源,对Promise有了更好的理解。结合对项目的工作知识,能够有一个清晰的理解。 26、 异步编程 要理解什么异步编程,我们首先应该刷新同步编程的知识。

    15920

    MobX 背后的基础原理

    在开发 MobX 之前,花了好些个工夫研究开发者如何看待现有的库。 这导致了一个干净计算派生图,好过一个不清晰的互相触发的 reactions 链。 对于计算值,MobX 可以感知它们是否在某处被使用。这意味着计算值可以被自动延迟并被垃圾回收。这节省了大量的引用,并对性能有显著的积极影响。 计算值被强制执行为无副作用的。 因为其不被允许有副作用,MobX 就可以安全的对其执行先后重新排序,以保证重新运行次数的最小化。可以简单的认为,如果计算值未被观察,就懒运行其计算计算值会被自动缓存。 总结 MobX 被设计为一种通用应用反应式库,而不只是用来重新渲染 UI 的工具集。 相反,推广了一种有效工作(兼具性能和效果)的概念,那就是数据应该尽量由其他数据推断出来。

    33810

    Swift-MVVM 简单演练(一)

    当然如果有什么存在的问题,欢迎批评指正,我会积极改造的! ---- 这篇文章都写啥 自定义NavgationBar 抽取便利构造函数 初步的下拉刷新/上拉加载的简单处理 未登录逻辑的处理 苹果原生布局NSLayoutConstraint 如何用VFL布局( leftBarButtonItem`渲染颜色 navigationBar.tintColor = UIColor.orange ---- 设置设备方向 有些时候我们的APP可能会在某个界面里面需要支持横屏但是其它的地方又希望只支持竖屏 但是仔细观察存在问题的 第一行应该是从9开始的,说明tableView的起始位置不对 如果数据足够多的情况下(多到可以超过一个屏幕的数据),可以发现下面也是停在tabBar的后面,底部位置也有问题 解决 还是之前的原则,不管做什么新功能,增加什么临时的需求,我们要做的都是想办法对原来的代码及架构做最小的调整,特别是对原来的Controller里面的代码入侵的越小越好。

    1.2K51

    CString 和 char* 类型转化

    I love %s", graycat);   注意由于在可变参数列表中的值(在函数说明中是以“...”表示的)并没有隐含一个强制类型转换操作符。你会得到什么结果呢?    ,保证不加长”。 当你调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。    同时,还应该注意的,如果你有一个常量串指针,这个串本身的值被存储在只读内存中,如果试图存储,即使你已经调用了 GetBuffer ,并获得一个只读内存的指针,存入操作会失败,并报告存取错误。 不论如何,在 Unicode 模式下,所有的字符都是2个字节大小,我们需要处理这个问题。微软的文档令人惊讶对此保持缄默:REG_SZ 的值究竟是以字节计算还是以字符计算呢?

    3.9K20

    通过 41 个 问答方式快速了解学习 Git

    5.什么时候使用 git stash 发现有一个类多余的,想删掉它又担心以后需要查看的代码,想保存但又不想增加一个脏的提交。这时就可以考虑 git stash。 11.当在其他分支中添加的文件仍然在工作分支中显示为未跟踪或修改时,如何重置分支 这通常是“工作索引”不干净时切换分支的结果。 在 git 中没有内置的方法来纠正这一点。 为什么有时需要使用 --force 来强制提交更改 rebase 一个可以重新提交的命令,改变了 SHA1 hash。如果这样,本地提交历史将不再与其远程分支保持一致。 这意味着在提交之前就已经有了提交冲突,如果没有正确解决,那么下面的许多提交也可能发生冲突。为了限制这一点,经常使用 rebase -i 来压缩提交历史记录,以便更轻松使用它。 假设 master 分支咱们的主分支,咱们不希望有选择的历史记录中提取提交,这会以后引起冲突。 咱们想要 merge 或 rebase 分支的所有更改。

    41750

    通过 41 个 问答方式快速了解学习 Git

    5.什么时候使用 git stash 发现有一个类多余的,想删掉它又担心以后需要查看的代码,想保存但又不想增加一个脏的提交。这时就可以考虑 git stash。 11.当在其他分支中添加的文件仍然在工作分支中显示为未跟踪或修改时,如何重置分支 这通常是“工作索引”不干净时切换分支的结果。 在 git 中没有内置的方法来纠正这一点。 为什么有时需要使用 --force 来强制提交更改 rebase 一个可以重新提交的命令,改变了 SHA1 hash。如果这样,本地提交历史将不再与其远程分支保持一致。 这意味着在提交之前就已经有了提交冲突,如果没有正确解决,那么下面的许多提交也可能发生冲突。为了限制这一点,经常使用 rebase -i 来压缩提交历史记录,以便更轻松使用它。 假设 master 分支咱们的主分支,咱们不希望有选择的历史记录中提取提交,这会以后引起冲突。 咱们想要 merge 或 rebase 分支的所有更改。

    23120

    前端领域的 “干净架构”

    今天我们来看一种前端架构的模式,原作者称它为“干净架构(Clean Architecture)”,文章很长,讲的也很详细,花了很长时间去读完了,看完很有收获,翻译给大家,文中也融入了很多自己的思考 干净的架构就可以帮助我们实现这一目标。 什么干净的架构? 干净架构一种根据应用程序的领域(domain)的相似程度来拆分职责和功能的方法。 领域(domain)由真实世界抽象而来的程序模型。 比如方法应该是这样的: 计算总价的方法 检测用户口味的方法 检测商品是否在购物车的方法 设计应用层 应用层包含用例,一个用包含一个参与者、一个动作和一个结果。 依赖于接口中描述的行为,所以只要接口保持不变,我们就不需要关心哪个模块来实现它以及如何实现,这样的模块就是可替换的。 有什么可以改进的 上面介绍的这些已经可以让你开始并初步了解干净的架构了,但是想指出上面为了让示例更简单做的一些偷工减料的事情。

    10520

    GitHub 上的这个项目到底是什么鬼?

    就特么这么一个项目每天的 star 量好几百,一周的 star 量上千。这么开源库具体作用呢?没什么作用,就是用各种语言无限打印 e 的项目。 那它怎么能无缘无故的火了呢? 他创建了这个空的存储库,好像他还发现,无法通过 git 提交,无法分叉,因为它是空的,所以不得不删除并用 README.md 重新创建。 不知道你们发现了没有? 另外,GitHub 官方貌似也在禁止或者想让他把这个开源库的名字进行修改,GitHub 一开始给他发的邮件,有点强制性的意思,说:你必须把开源库的名字控制在 10 以内。 感觉还是挺有意思的,这个作者很较真,很倔啊!哈哈……但是,想说,大家还是应该好好利用 GitHub 这个开源的地方,尽量不要滥用。不要把一片干净的湖水弄得浑浊,否则大家找到好东西的成本就太高了。 其实,看完作者写的文章,还是有点迷糊,不知道你们是否了解背后的内幕呢?欢迎大家留言交流。 。

    36330

    作为软件开发人员需要的技术技能

    虽然认为你最终应该学习不止一种编程语言,但 建议不要提前做, 因为只会导致混乱,并且会将你的精力从你需要学习的许多其他技术技能上转移开来。 在学习了编程语言之后 - 或者最好在学习的同时 - 坚信你需要知道的下一件事如何正确构建你的代码。 构建代码的意思是什么不打算在本书中详细介绍如何正确构建代码 - 就像我说的 - 已经为您提供了一个很好的资源,但 您应该努力学习如何从一开始就编写好的,干净的代码 而不是事后学习这个技能。 可以保证,即使你初学者,如果你能写出好的,干净的,简洁的,可理解的代码,在结构本身中表达的意义,那么任何看到你的代码的浏览者都会 认为你经验丰富的专业。 如果你使用测试驱动开发这样的方法,你可能会花很少的时间在调试器上,但无论你做什么,无论你如何尝试和绕过, 你将不得不学习如何调试你的代码 或别人的。

    46210

    相关产品

    • FPGA 云服务器

      FPGA 云服务器

      腾讯FPGA云服务器是基于FPGA硬件可编程加速的弹性计算服务,您只需几分钟就可以获取并部署您的FPGA实例。结合IP市场提供的图片,视频,基因等相关领域的计算解决方案,提供无与伦比的计算加速能力……

    相关资讯

    热门标签

    扫码关注腾讯云开发者

    领取腾讯云代金券