PDF 课件和源代码下载地址:
作者回复: 一起加油!
作者回复: .m里面的interface其实就是类扩展的一种方式,可以看到在类名字的后面加了括号,但是没有继承的声明。这种扩展方式也可以写在其他文件,用于扩展一些特殊的属性和方法,比如流行的SDWebImage就对各个基础的UI类做了扩展。对于你问题中的实现方式,在.h.m中使用类似的扩展,其实就是将私有的属性写在.m文件中,只将对外暴露的属性和方法写在.h中。
作者回复: UILabel应该在iOS13的开发上没有明显的改变。 能描述下具体的问题,或者有什么报错或者Log麻烦提供下,或者上传下代码,我帮你看下。
作者回复: 方便往往带来的是不够灵活和深入。当然对于一个中小型App不使用纯代码是没有问题并且能胜任的,但是对于大型的App,无论从需求的复杂程度、组件的封装复用、性能的深入优化等,以及多人协作管理方面,frame都会带来很多的便利。当然两种方式背后的原理和布局思路是一致的,只是在实现的层面略有不同,掌握了一种也可以很快的切入另外的一种。
作者回复: 好的,如果时间允许的话也建议您跟着视频动手实现一遍代码,会加深记忆~
作者回复: 这个问题的前提,是通常情况下layoutSubviews会调用多次,包括view尺寸变化的时候,init只会调用一次。所以对于依赖父View bounds变化的子view来说,设置frame 最好放到layoutSubviews中随时的响应调整,而不依赖的子view其实放到哪里都可以。
作者回复: 后续课程会讲
作者回复: 后续的课程会讲
作者回复: 后续会伴随其它知识的讲解,逐步的实现效果
作者回复: 1. 设置label的center中的y,为cell高度的一半
2. 设置label的original中的y,为(cell高度-label高度)/2
作者回复: gcc的一种扩展,具体可见https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html 在代码多的时候很好用