zoukankan      html  css  js  c++  java
  • iOS 使用xib定义一个View,修改frame无效问题解决

    遇到过好多次使用自定义view,修改frame无效问题, 之前都是放弃xib,直接手写,发现手写简单的还行,复杂的UI就坑逼了。所以还是需要用到可视化编辑的xib。

    整理一下,自己备忘也供iOS开发的朋友参考:

    一般我们会直接这样写:

    XPGovRecUnitView *recUnitView = [[[NSBundle mainBundle] loadNibNamed:@"XPGovRecUnitView" owner:self options:nil] firstObject];
                recUnitView.tag = 10000+i;
                recUnitView.delegate = self;
                recUnitView.frame = CGRectMake(i*89, 0, 89, 139);
    

      

    这是我一个项目中的代码,但是这样出现了一个问题就是iPhone 6,6Plus以上的正常, iPhone5s屏幕尺寸的就显示不正常了。

    使用

    UIView *recUnitView = [[UIView alloc] initWithFrame:CGRectMake(i*89, 0, 89, 139)];

    调试后发现,使用alloc的方式iPhone5也是正常的。但是这样就要手写代码,往这个UIView 添加控件

    解决方案:

    1. 先把 XPGovRecUnitView.xib这个xib文件的属性设置一下

      在右侧属性栏中,
      找到Interface Builder Document , 把Use Auto layout的勾去掉
      找到Simulated Metrics , 把Size 设置成None, 没有None就是Freeform

    2.修改XPGovRecUnitView.m代码 

      

    #import "XPGovRecUnitView.h"
    
    @interface XPGovRecUnitView ()
    {
        CGRect tempframe;
    }
    
    
    @end
    
    @implementation XPGovRecUnitView
    
    -(id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            NSArray *nibs=[[NSBundle mainBundle]loadNibNamed:@"XPGovRecUnitView" owner:nil options:nil];
            self=[nibs objectAtIndex:0];
            
            tempframe = frame;
            
            [self initSubViews];
        }
        return self;
    }
    -(void)drawRect:(CGRect)rect
    {
        self.frame = tempframe;
        
    }
    
    @end
    

      

    3.使用时代码

      

    XPGovRecUnitView *recUnitView = [[XPGovRecUnitView alloc] initWithFrame:CGRectMake(i*89, 0, 89, 139)];
                recUnitView.tag = 10000+i;
                recUnitView.delegate = self;
    

      

    这样就正常了。

  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/xiaopin/p/7085286.html
Copyright © 2011-2022 走看看