iOS给View添加虚线边框不显示

项目场景:

国庆回来有小半个月没写代码了,生疏~国庆快乐啊!

今天浅浅的UI验收,提了一个bug说我没画一个输入框背景的边框虚线,真的3Q了,其实吧我司一直用的摹客这个平台,浅浅吐槽一下,当选中某个控件的时候,这的确是实线啊,小王无语
未选中状态
未选中状态
选中状态
选中状态

图示是我放大172%倍看出来的,摹客网编辑、看到请优化一下,感谢。

当然了,这不是问题主要原因。


问题描述

最常规的给View添加虚线边框,但是不显示

    UIBezierPath *maskPath=[[UIBezierPath bezierPathWithRoundedRect:self.messageTf.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(10.5*FTGetScreenScale(), 10.5*FTGetScreenScale())] bezierPathByReversingPath];
    CAShapeLayer *border = [CAShapeLayer layer];
    //虚线的颜色
    border.strokeColor = [UIColor colorWithRed:151/255.0 green:151/255.0 blue:151/255.0 alpha:0.54].CGColor;
    border.masksToBounds = YES;
    //填充的颜色
    border.fillColor = [UIColor clearColor].CGColor;
    //设置路径
    border.path = maskPath.CGPath;
    border.frame = self.messageTf.bounds;
    border.lineCap = @"square";
    //虚线的宽度
    border.lineWidth = 1.f;
    //虚线的间隔
    border.lineDashPattern = @[@4, @4];
    [self.messageTf.layer addSublayer:border];

原因分析:

我在viewDidLoad 刷新UI用的mas定义self.messageTf控件,此时的长宽为0
在这里插入图片描述
原本以为是self.messageTf.bounds没有用self.messageTf.frame,一样无效
在这里插入图片描述

使用Masonryframe跟bounds为0的情况


解决方案:

在添加虚线前,直接刷新视图,以获得视图的长和宽。

[self.view layoutIfNeeded];

在这里插入图片描述

同理,如果bounds为0的情况下,直接刷新一下布局就ok了。