最近也开始看一些编程之外的书籍了, 比如在看的<<软技能--代码之外的生存指南>>中, 看到了一些非常有用的建议, 比如说记工作日志什么的对自己将来的职业发展都有很大的帮助云云, 确实, 自己也意识到在自学的过程中, 光有输入的过程是不够的,还需要更多的输出, 不管是敲代码还是像现在这样记录Bug, 都是对学习到的知识的巩固, 其实应该早就开始类似的这种记录的, 不过现在开始也还不算太晚, 废话就不多说了, 开始抓第一只虫子之旅.
先描述下这个问题:在从返回的数据中明明已经能够确认返回的图片是一张大图, 而且在TopItems中已经修改其大图属性为YES, 但是在真正根据大图属性修改其填充模式时(由UIViewContentModeScaleToFill 修改为 UIViewContentModeTop不想截图了, 具体参考YYHTopicPictutrView中50-73行内容), 并没有出现预期的界面.
解决过程:先在YYHTopicPictutrView 49行打印大图属性, 发现其为NO, 但是在YYHTopicsItem 34行时, 已经将其修改为了YES, 为什么在用到它时, 还是NO呢?遂在两处都打上了断点再次运行发现竟然是先调用的YYHTopicPictutrView 49行, 并没有来到YYHTopicsItem 34行.找到这个原因后, 分析YYHTopicsItem 34行是在cellHeight方法中, 而cellHeight会是在tableView中计算所有的cell的高度中调用,返回每一行的准确高度,该方法会在一开始就计算所有cell的高度,因为需要在一开始就知道contentSize,并且当每行cell将要出现在屏幕上时,也会调用该方法.- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath; 按道理不应该会出现49行先于34调用的情况出现, 后来想到之前设置过每一行cell的 估算高度, 而一旦设置了每行cell的估算高度后, 就不会在一开始调用- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;方法中一开始计算一遍所有cell的高度, 所以才会出现以上问题, 当注释掉设置的估算高度, 问题马上解决.