今天差点出大事..来看看我遇到的一些坑(:з」∠)
1.分支的坑
不要直接在master分支上面改代码!!一定要记住是新建一个分支!!分支上面改啊!!如果不小心在master上面改了,想推到分支上面,该怎么办呢?
在SourceTree上面找到自己提交的分支,右键,遴选到我的分支上面,删除master分支(记得不要推到远端,会出大事!)
不过还是尽量不要碰master了,今天吓死我了..
2.新增状态栏布局显示一半
是因为父布局的大小忘记修改了,然后状态栏增加之后没考虑到大小修改的情况,在initWithFrame
里面记得修改height
大小就可以了。
3.状态栏布局新加文字不显示
令文字的centerY
=状态栏的centerY
,因为我是在状态栏里面addSubView
,所以其实文字是相对于状态栏的而不是整体布局,会导致文字的centerY
会在状态栏的下下下下下面。。因此应该令文字的centerY
=状态栏的height
/ 2
4.解决冲突
当两个分支发生冲突的时候,首先通过SourceTree查看冲突,然后根据冲突找到相应的代码,在冲突的行里面结合好代码之后,回到SourceTree,将冲突标记为已解决
,最后commit掉。
5.适配大小屏
iPhone X是最大屏的手机,iPhone SE是最小屏的手机,完成一个功能需要适配这两种屏幕。一开始没有经验,写死了x,导致部分控件不可见。
解决:将不可见的部分改为写right,即相对于右边的屏幕布局。
6.关于Masonry使用问题
如果在layoutSubView
里面调用mas_makeConstraints
的话,会不断为原控件添加约束,这样就很容易会造成约束冲突。我们想要的其实是覆盖而不是添加,因此应该调用的是mas_remakeConstraints
方法。
7.关于状态栏可见性问题
我把状态栏的hidden
写在了layoutSubviews
里面,而上下滑动切换房间是不会对子布局进行重新构造的,这时候需要将hidden
放在上下滑动也可以调用的函数才对。
更新于7.20
1.添加蒙层以及点击蒙层消失
+(instancetype)makeViewWithMask:(CGRect)frame andView:(UIView*)view{
MaskView *mview = [[self alloc]initWithFrame:frame];
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[delegate.window addSubview:mview];
[mview addSubview:view];
return mview;
}
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.frame = frame;
self.backgroundColor = [UIColor colorWithRed:(40/255.0f) green:(40/255.0f) blue:(40/255.0f) alpha:1.0f];
self.userInteractionEnabled = YES;
UITapGestureRecognizer *pan = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeView)];
[self addGestureRecognizer:pan];
}
return self;
}
//单击蒙层取消蒙层
-(void)removeView{
[self removeFromSuperview];
}
其实是在window
上新增一个视图(视图上把原来的视图加进去,再加点自己的东西),然后对这个视图进行手势监听,如果监听到按下手势,则将这个视图移除。
2.关于布局大小适配机型问题
布局一般先获取width:
width = 本机的width - 间距 * 2
height = width / 本机的width * 本机的height
3.关于布局函数调用问题
一般来说,在initWithFrame
里面设置大小,在layoutSubviews
设置位置。
4.关于横竖屏判断的问题
横竖屏判断不能用UIInterfaceOrientation
,这是Apple提供给我们判断手机方向的,当手机平躺的时候,你是不知道到底处于竖屏还是横屏状态的,因此,通过width和height
的大小关系来判断才是最准确的。
当width > height
时,则为横屏;否则为竖屏。
更新于8.1
1.关于缩略图宽度大于屏幕宽度的问题
在iOS布局流中需要进行图片的裁剪,虽然官方有直接裁剪的接口,但是很尴尬的是,即便在iPhone X发布的照片,经过裁剪过后,然后长于屏幕宽度,于是。
这时候不得不先压缩
再显示,更尴尬的是,接口只能够用一次,要么裁剪要么压缩,没办法,只能用setContentMode
来满足需求了。
压缩至屏幕宽度之后,设置一个标志符,说明这张图片是经过压缩的,然后在回调函数中,如果是经过压缩的,则设置setContentMode
[self.imageView setContentMode: UIViewContentModeTopLeft];
由于图片宽度不变,则其实这时候图片的显示是这样的
即便点到了非image的部分,仍然会响应查看图片的请求,所以必须要在cell中设置
self.width = self.imageview.image.size.width
2.九图布局显示
3.GIF判断
4.扩大UIButton相应区域
参考app中扩大按钮(UIButton)响应区域,通过设置setImageEdgeInsets
方法,计算出UIButton内嵌UIImage的大小
响应区域大小 = UIButton大小
上下左右的Edge = (UIButton大小 - 展示图片大小) / 2
更新于8.8
Sourcetree "由于文件大小或模式问题无法进行差异对比"
完成后,打开project.pbxproj文件,找到冲突的地方自行解决,之后再标记为“已解决”
更新于8.24
今天因为没搞清楚原逻辑就改代码,出了一个bug,以后删除代码的时候一定要先搞清楚原来的逻辑是怎样的。
网友评论