ios中怎么在xib中添加的scoller没有显示

 我来答
huanglenzhi
2015-01-01 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517195
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  供你参考,看看是否哪里存在问题:直接加载xib中的UIView
  创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1

  由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None。
  
  将下面代码放到viewDidLoad中:
  //1
  
  NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"View1" owner:nil options:nil]; //&1
  
  UIView *v = [views lastObject];
  
  CGRect r = v.frame;
  
  r.origin.y += 80;
  
  v.frame = r;
  
  [self.view addSubview:v];
  
  &1这行代码就是加载View1.xib, 然后将xib中的UIView实保存到views中, 由于xib中我们只拖入了一个view, 所以这儿lastObject就返回这个view的实例,这样便加载了xib中的UIView. 接着将这个UIView addSubview到其它view上,运行效果如图:

  2. 通过Owner建立变量关联
  首先我们为ViewController创建一个IBOutlet属性:
  @property (nonatomic, weak) IBOutlet UIView *referencedView;
  
  接着同上面介绍的一样创建一个View2.xib,

  
  File’s Owner中,我们设为ViewController, 这样我们就可以与实例变量_referencedView建立关联了,如图:

  
  接着在viewDidLoad中,在刚才加入的代码下面添加如下代码:
  // 2
  
  [[NSBundle mainBundle] loadNibNamed:@"View2" owner:self options:nil];
  
  r = _referencedView.frame;
  
  r.origin.y = v.frame.size.height + v.frame.origin.y;
  
  _referencedView.frame = r;
  
  [self.view addSubview:_referencedView];
  
  与//1中的代码有点类似,只不过owner属性为self了。这样一来,loadNibNamed后,就会实例化与之关联的变量_referencedView, 运行程序你将会看到效果:

  3.Class Owner建立变量关联
  其实这个原理与上面2说的一样的,只不过这儿我们特别定义一个class来作为xib的Owner, 要所有需要关系的view都可以声明在这个Owner中,这样方便代码管理与维护。
  
  这里我们声明一个NSObject的子类FileOwner, 然后再在FileOnwer中声明IBOutLet的关联变量:
  @property (nonatomic, weak) IBOutlet UIView *view;
  
  同理创建一个View3.xib, File’s Owner设为FileOwner, 并建立view关联:

  
  接着在viewDidLoad结尾处添加以下代码:
  // 3
  
  FileOwner *owner = [FileOwner new];
  
  [[NSBundle mainBundle] loadNibNamed:@"View3" owner:owner options:nil];
  
  r = owner.view.frame;
  
  r.origin.y = _referencedView.frame.origin.y + _referencedView.frame.size.height;
  
  owner.view.frame = r;
  
  [self.view addSubview:owner.view];
  
  运行效果:
  
  4. 引入UIView Category
  为了代码简单,我们增加一个UIView Category方法:
  +(id)loadFromNibNamed:(NSString*) nibName {
  
  return [FileOwner viewFromNibNamed:nibName];
  
  }
  
  其中FileOwner的class 方法:
  +(id)viewFromNibNamed:(NSString*) nibName {
  
  FileOwner *owner = [self new];
  
  [[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:nil];
  
  return owner.view;
  
  }
  
  这样加载xib的代码就会变得更简单。
  
  同理,我们创建一个View4.xib, File’s Owner设为FileOwner, 并建立view关联:

  
  接着在viewDidLoad尾添加代码:
  // 4
  
  UIView *v4 = [UIView loadFromNibNamed:@"View4"];
  
  r = v4.frame;
  
  r.origin.y = owner.view.frame.origin.y + owner.view.frame.size.height;
  
  v4.frame = r;
  
  [self.view addSubview:v4];
  
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式