遇到过好多次使用自定义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. 2017.08.08【NOIP提高组】模拟赛B组

    Summary 今天的题目也不算很难,唯一一道没做出来的题目是以前做过的,太不应该了. Problem T1 油滴扩展 题目大意 给你一堆点,你准备要在这么多的点当中滴油.你可以自己安排顺序,每次滴油 ...

  2. Flask 三方组件 Flask-Session

    使用 from flask import session, Flask from flask_session import Session from redis import Redis app = ...

  3. jQueryUI使用指南

    jQuery UI包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的模式,所以,只要您学会使 ...

  4. java第一次课

    package java第一周学习2; 达达20173435 信1705-2 import java.text.SimpleDateFormat; import java.util.Date; pub ...

  5. quartz详解2:quartz由浅入深

    http://blog.itpub.net/11627468/viewspace-1763498/ 一.quartz核心概念 先来看一张图:     scheduler 任务调度器 trigger 触 ...

  6. H3C505

    H3C505 1.立方体案例 2.3D变换 1)景深透视 prospective:xx px; 设置观察元素的距离,数值小时,在元素内进行观察 prospective-origin: xpx,xpx ...

  7. JSAP106

    JSAP106 一.clientX.clientY 点击位置距离当前body可视区域的x,y坐标 二.pageX.pageY 对于整个页面来说,包括了被卷去的body部分的长度 三.screenX.s ...

  8. Servlet(1)—Servlet容器tomcat和HTTP协议

    Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理他们的共享数据. Servlet容器也称JavaWeb应用容器,或者Servlet/JSP容器 ...

  9. fzu1062 洗牌问题(思路模拟)

    http://acm.fzu.edu.cn/problem.php?pid=1062 一开始想暴力找规律,没看出来..然后开始推,推测根据1再次返回第一个的时候顺序也复原,然后想以此推导出一个规律公式 ...

  10. CentOS 7配置成网关服务器

    其实在Linux下配置网关服务器很简单,如果配置好之后出现无法访问外网的情况,那么可以排查以下情况: 1.防火墙和iptables的服务关掉(firewalld.iptables) 2.清空iptab ...