PDF 课件和源代码下载地址:
作者回复: 两个小问题哈 1. 那张图片名称是 “timg” .. 我之后修改下 2.使用imageNamed这个函数,对于png图片是可以忽略扩展名的,其它类型的图片需要加上扩展名,这张图片是jpeg的,所以应该是[UIImage imageNamed:@"icon.bundle/timg.jpeg"],相关的文档可以在https://developer.apple.com/documentation/uikit/uiimage/1624146-imagenamed中看到,在讲解的demo中都加入了扩展名,建议也都加上哈。 3. 具体本地图片都管理和适配,在后续都课程中会有单独讲解
作者回复: view是414,展示出来的cell宽度也是414。为什么在你log中打印出来的是320呢,因为这个是一个初始化的默认状态。当我们使用initWithStyle创建cell的时候,是没有给cell赋值frame的,所以系统会分配给cell 320的默认宽度,而cell初始化结束,即将进入willdisplay的时候,系统内部会对cell进行frame的重新赋值,我们可以重写cell的 setFrame方法并加上断点,可以看到cell 在init的时候默认设置了320,之后系统函数_configCellForDisplay时会再次的setFrame为正确的宽度414,这也就印证了,我们在cellForRowAtIndexPath这个函数中取到的宽度是错误的,但是在willDisplayCell这个delegate中取到的cell宽度是正确的。以上其实也是我们使用UITableView需要注意的一个问题,就是我们的复杂UI计算和布局,其实尽量应该写在willDisplayCell而不是cellForRowAtIndexPath。当然简单一致的逻辑是没区别的,同时我们也可以在cell的setFrame中重新触发layout来避免这个问题。
作者回复: 在OC中, @property 修饰的其实就是我们常说的实例变量。当然和其它语言的实例变量一样,我们可以在类的内部任何的函数中来使用和修改它。当然对于OC中,使用@property编译器会自动添加实例变量的setter和getter方法等等。在自动生成方法的同时,也提供了多种关键字来控制变量的一些额外的特性,比如readonly、readwrite、assign、weak等等,通常不特殊声明使用的都是默认的关键字,有特殊情况的时候我们才会使用,比如我们不想持有一个外部对象的时候,就会使用weak关键字。具体深入的了解可以看下https://developer.apple.com/library/archive/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html
作者回复: 加一下imageView的clipsToBounds属性哈,如果图片大于ImageView,是需要裁剪掉的
作者回复: 方便上传下代码哈,我帮看看