加载XIB绘制的页面时的注意事项

问题如下:

笔者为了省事,在开发某个页面时是通过xib直接画的页面,然后在真机运行时为了让该页面适配不同机型所以在

xxx = [[[NSBundle mainBundle] loadNibNamed:@"xxx" owner:self options:nil] firstObject];

之后设置xxx的frame,

xxx.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);

但是xxx页面上有个控件需要设置半圆角,于是笔者在xxx类的.m里面的 awakeFromNib方法做了如下操作

- (void)awakeFromNib {

    [super awakeFromNib];

    // Initialization code

    //TODO:uiview 单边圆角或者单边框

    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:_alert_view.bounds byRoundingCorners:(UIRectCornerBottomRight | UIRectCornerBottomLeft) cornerRadii:CGSizeMake(5,5)];//圆角大小

    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];

    maskLayer.frame = _alert_view.bounds;

    maskLayer.path = maskPath.CGPath;

    _alert_view.layer.mask = maskLayer;

    

    //解决不同机型界面上还是顽固的显示xib上的尺寸大小

    self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    self.translatesAutoresizingMaskIntoConstraints = YES;

    

}

备注:_alert_view设置了约束距离屏幕左右两边均为15

由于xib绘制页面时屏幕宽度是5s的宽度,当该页面在iPhoneX上运行时_alert_view的尺寸大小变成了


究其原因是因为在xxx = [[[NSBundle mainBundleloadNibNamed:@"xxx" owner:self options:nilfirstObject];时就执行了awakeFromNib该方法,由于设置半圆角代码

askLayer.frame = _alert_view.bounds;

maskLayer.path = maskPath.CGPath;

_alert_view.layer.mask = maskLayer;

的原因针对_alert_view改变了其frame,此时在设置

xxx.frame = CGRectMake(00kScreenWidthkScreenHeight);

想改变xxx的frame进而通过约束想改变_alert_view的frame已经无法生效,因此解决方法就是把设置半圆角的代码延迟执行

[self performSelector:@selector(layoutMyCorner) withObject:nil afterDelay:.0];

这样在整个页面加载完毕frame已经设置正确 在执行设置圆角的代码就可以解决上述问题





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值