遇到过好多次使用自定义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;

  

这样就正常了。

iOS 使用xib定义一个View,修改frame无效问题解决的更多相关文章

  1. iOS 使用xib后获取view的frame出错的问题

    如果控制器使用xib做的,在viewDidLoad方法中获取的view.frame是不正确的 这根xib的加载有关, 可以把需要做的事情写在viewWillAppear中就能解决

  2. 使用xib封装一个view的步骤

    1.新建一个xib文件描述一个view的内部结构(假设叫做SSTgCell.xib) 2.新建一个自定义的类 (自定义类需要继承自系统自带的view, 继承自哪个类,  取决于xib根对象的Class ...

  3. [iOS]通过xib定义Cell然后关联UICollectionView

    先新建一个View的xib,然后删掉自动生成的View,拖进一个UICollectionCell,再新建一个对应的UIView继承UICollectionCell类. OK,接下来该连outlet的就 ...

  4. 利用KVO监视一个view的frame

    首先,keyPath一定是frame,而不是frame.origin.x之类的路径,因为再点下去的话,就是访问结构体内部的值了,KVO是无法检测的,会报错找不到KeyPath. 代码如下: [_fun ...

  5. iOS View的Frame和bounds之区别,setbounds使用(深入探究)

    前言: 在ios开发中经常遇到两个词Frame和bounds,本文主要阐述Frame和bound的区别,尤其是bound很绕,较难理解. 一.首先,看一下公认的资料: 先看到下面的代码你肯定就明白了一 ...

  6. ios基础之 view的frame 与 bounds 的区别 (转)

    前言: 学习ios开发有一段时间了,项目也做了两个了,今天看视频,突然发现view的frame和bound两个属性,发现bound怎么也想不明白,好像饶你了死胡同里,经过一番尝试和思考,终于弄明白bo ...

  7. ios view的frame和bounds之区别(位置和大小)

    前言: 学习ios开发有一段时间了,项目也做了两个了,今天看视频,突然发现view的frame和bound两个属性,发现bound怎么也想不明白,好像饶你了死胡同里,经过一番尝试和思考,终于弄明白bo ...

  8. iOS 用xib自定义view控件 debug笔记

    1.在view不是很复杂的情况下,如果多次检查后依旧出现coding-compliant这种情况,干脆彻底删除这个xib重新新建一个xib来做一遍.(至今未明真相) 2.初始化xib中的view的大致 ...

  9. 【原】iOS:一种直接修改frame的某个属性的方法

    在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候.我们知道,正常情况下我们无法对frame的某个属性(x,y,width,height等)进行单独修改,比如: someView.f ...

随机推荐

  1. 狡猾的商人 [HNOI2005] [一题双解]

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  2. JS 之 script标签

    1.script标签 1.js代码的解析(包括下载js文件)会阻塞页面加载 2.当js文件放在头部,页面必须等所有js代码都被下载,解析和执行完成后才开始呈现页面内容(遇到body标签才呈现),对于那 ...

  3. NodeJS多进程

    NodeJS多进程 Node以单线程的方式运行,通过事件驱动的方式来减少开销车,处理并发.我们可以注册多进程,然后监听子进程的事件来实现并发 简介 Node提供了child_process模块来处理子 ...

  4. helm-chart-1-简单概念介绍-仓库搭建-在rancher上的使用

    简单的概念介绍: Chart是helm管理的应用的打包格式,一个chart对应一个或一套应用.内部是一系列的yaml描述文件,以为为yaml 服务的文件. 三个部分,helm .tiller.repo ...

  5. 论文泛读 A Novel Ensemble Learning-based Approach for Click Fraud Detection in Mobile Advertising [1/10]

    title:新的基于集成学习的移动广告作弊检测 导语:基于buzzcity数据集,我们提出了对点击欺诈检测是基于一组来自现有属性的新功能的一种新方法.根据所得到的精度.召回率和AUC对所提出的模型进行 ...

  6. VS2013中Python学习笔记[基础入门]

    前言 在上一节中简单的介绍了在VS2013中如何进行开发Hello World,在VS2013中进行搭建了环境http://www.cnblogs.com/aehyok/p/3986168.html. ...

  7. C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全

    前言: C++的异常处理机制是用于将运行时错误检测和错误处理功能分离的一 种机制(符合高内聚低耦合的软件工程设计要求),  这里主要总结一下C++异常处理的基础知识, 包括基本的如何引发异常(使用th ...

  8. centos 安装gitee备忘

    centos 安装gitee备忘:安装前需要升级git.需要安装mysql阿里云主机需要把端口加入例外需要修改全局配置文件把localhost改为ip需要设置为后台运行

  9. Git删除本地分支和远程分支

    https://blog.csdn.net/sub_lele/article/details/52289996 git branch help λ git branch -h usage: git b ...

  10. ionic 视图滚动到顶部

    问题描述 进入页面, 滚动到底部 点击一个连接, 当前视图内容更新了 内容滚动到了上次的位置导致底部的内容没显示 需要控制自动回滚到顶部 <ion-content delegate-handle ...