新公司上班第6天了,记录下开发中遇到的几个问题,其中有个问题现在还没弄清楚其中的原理。懂的大佬可以解释下。话不多说,马上聊下这几个问题。
1.当我继承UITableVIewCell 时 用Masory 约束 子控件出现了的一个诡异问题。(系统Cell的分割线都不显示。)
因为项目前期(项目还在由外包承担,我也不知道为什么公司这么着急招人)。。。自己看着设计开始写写布局。随便练练手。
我的cell 是用纯代码懒加载写的。
-(void)layoutSubviews {
[self.infoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.contentView).offset(15);
make.top.equalTo(self.contentView).offset(15);
make.width.mas_equalTo(60);
make.height.mas_equalTo(60);
}];
}
之后将约束写在了这个方法里面。最后运行发现系统的分割线不见了(不是不见了,当行数多的时候还会出来1,2条,复用情况)。惊呆了。为什么? 后来开始尝试解决到底是什么引起的。
1.三个方向开始研究是什么导致的。
是不是tableView复用方法的问题。因为我tableView 一般都是register的,很少使用静态变量方法。用静态变量尝试更改,发现无果。问题还是依旧。 因为我觉得cell分割线不见了 是不是cell的style发生了变异。 所以尝试这个。。。
2.是不是布局的子视图较多,约束出现了问题??
因为在该cell中,进行了从上至下的4个视图的布局。最后并没有使用tableView的自适应高度。而是将rowHight 写死,是不是因为控件多的元素导致的。高度不够了? 由此将控件只写一个。然后并未能解决问题。依旧是刚才刚才的情况。
3.是不是不能在layoutSubView里做布局?
这个我之前尝试过,我记得可以在layoutSubView中布局,去动态改变cell的样式或者高度 也并没出现消失分割线的情况。这次难道会是这里的问题导致的? 接着尝试 不在这里做约束布局。在init方法理直接做。
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self =[super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self.contentView addSubview:self.infoImageView];
[self.contentView addSubview:self.titleLabel];
[self.contentView addSubview:self.dateLabel];
[self.contentView addSubview:self.clickLabel];
// 添加子控件的约束
[self makeSubViewsConstraints];
}
return self;
}
-(void)makeSubViewsConstraints {
[self.infoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.contentView).offset(15);
make.top.equalTo(self.contentView).offset(15);
make.width.mas_equalTo(60);
make.height.mas_equalTo(60);
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.infoImageView.mas_right).offset(7);
make.top.equalTo(self.infoImageView);
make.height.mas_equalTo(22);
make.right.equalTo(self.contentView).offset(-15);
}];
[self.dateLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.titleLabel);
make.bottom.equalTo(self.infoImageView);
make.height.mas_equalTo(12);
make.width.mas_equalTo(120);
}];
[self.clickLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(self.dateLabel);
make.width.equalTo(self.dateLabel);
make.right.equalTo(self.titleLabel);
make.bottom.equalTo(self.dateLabel);
}];
}
发现这样下来 ,分割线就不会再消失了,都是正常显示。
按理说layoutSubView这个方法 是在tableView滚动的时候就持续执行的。这里去不断重复布局约束,应该没啥问题呀。为什么出现分割线消失的情况,有知道的大佬可以指点下。。小弟感激。
2.后台返回的URL 地址中出现了空格 导致前端加载 不出来图片。
3.打印 中文的json字符串
网友评论