开发经验总结(持续更新)

作者: 肠粉白粥_Hoben | 来源:发表于2018-07-10 12:05 被阅读31次

今天差点出大事..来看看我遇到的一些坑(:з」∠)

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.九图布局显示

iOS中如何优雅地处理票圈中的九图

3.GIF判断

iOS中如何判断一张图片是否为GIF

4.扩大UIButton相应区域

参考app中扩大按钮(UIButton)响应区域,通过设置setImageEdgeInsets方法,计算出UIButton内嵌UIImage的大小

响应区域大小 = UIButton大小
上下左右的Edge = (UIButton大小 - 展示图片大小) / 2

更新于8.8

Sourcetree "由于文件大小或模式问题无法进行差异对比"

完成后,打开project.pbxproj文件,找到冲突的地方自行解决,之后再标记为“已解决”


更新于8.24

今天因为没搞清楚原逻辑就改代码,出了一个bug,以后删除代码的时候一定要先搞清楚原来的逻辑是怎样的。

相关文章

网友评论

    本文标题:开发经验总结(持续更新)

    本文链接:https://www.haomeiwen.com/subject/sbrfpftx.html