文明的WeChat源码拜读

项目链接 :https://github.com/zhengwenming/WeChat

可以看到的知识点:
keyboardDismissMode contentMode preferredMaxLayoutWidth

基础结构

BaseNavigationController

BaseNavigationController 作为基础的navigationController
实现功能有:

  • statusBarUIStatusBarStyleLightContent
  • 统一设置navBar的格式
  • 不是rootViewController的VC,设置vc.hidesBottomBarWhenPushed = YES
BaseViewController

BaseViewController 作为基础的ViewController来说
设置的属性有 tableView dataSource
设置的方法有 registerCellWithNib:tableView: registerCellWithClass:tableView: getRandomNumber:to:

tableView的实现 : 初始化 设置代理 和数据源代理 设置keyboardDismissMode属性来dismiss键盘 设置tableFooterView为空view

dataSource的实现:Lazy NSMutableArray

三个方法的字面意思已经很好的解释了 就不做重复
另外说明一下 在BaseViewController里实现了部分数据源方法

#pragma mark TableView delegate
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.dataSource.count;
}
-(UITableViewCell *)tableView:(UITa
bleView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    return nil;
}

属性分析

keyboardDismissMode

keyboardDismissMode 属性为UIScrollView的属性,但凡子类或者本类基本都可以使用该属性来处理键盘,该属性为枚举类型,
如下图:

UIScrollViewKeyboardDismissMode

默认属性为UIScrollViewKeyboardDismissModeNone,如果设置了属性为UIScrollViewKeyboardDismissModeOnDrag 则拖拽的时候 键盘会自动消失。UIScrollViewKeyboardDismissModeInteractive该属性不做研究。

contentMode

UIView的属性 contentModel 为枚举类型,如下图

文明的WeChat源码拜读_第1张图片
UIViewContentMode

官方解释: 当一个view的bounds变化的时候用于决定其内容怎么变化
默认为:UIViewContentModeScaleToFill

ScaleAspectFit 将图片等比拉伸 可能不会填充整个区域
ScaleToFill 将图片按照整个区域拉伸会破坏图片比例
ScaleAspectFill 将图片等比例拉伸,会填充整个区域,但是会有一部分过大而超出整个区域
至于Top,Left,Right等等就是将图片在view中的位置进行调整

preferredMaxLayoutWidth

label自动换行之后,不设置preferredMaxLayoutWidth的话,系统会根据现在的宽度重新计算将来文字显示的高度.也就是说宽度变窄了,但是还要显示同样多的文字,导致高度变大了。所以说需要设置preferredMaxLayoutWidth来告诉系统Label的首选宽度

目前还没有遇到过显示不全的情况

你可能感兴趣的:(文明的WeChat源码拜读)