【问题标题】:I am adding a scroll programatically, but for some reason it doesn't start at the start我正在以编程方式添加滚动,但由于某种原因它没有从一开始就开始
【发布时间】:2014-03-20 10:56:02
【问题描述】:

我正在以编程方式添加一个滚动,但由于某种原因它没有从一开始就开始。

self.backgroundColor = [UIColor redColor];
self.scrollView = [[UIScrollView alloc]initWithFrame:self.frame];
self.scrollView.backgroundColor = [UIColor greenColor];
[self addSubview:self.scrollView];
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, self.scrollView.frame.size.height);

这里有一些日志:

NSLog(@"contentOffset - %@",NSStringFromCGPoint(self.scrollView.contentOffset));
NSLog(@"contentSize - %@",NSStringFromCGSize(self.scrollView.contentSize));
NSLog(@"contentInset - %@",NSStringFromUIEdgeInsets(self.scrollView.contentInset));
NSLog(@"frame - %@",NSStringFromCGRect(self.scrollView.frame));

2014-03-20 12:53:56.356 contentOffset - {0, 0}
2014-03-20 12:53:56.357 contentSize - {320, 423}
2014-03-20 12:53:56.357 contentInset - {0, 0, 0, 0}
2014-03-20 12:53:56.358 frame - {{0, 156}, {320, 423}}
2014-03-20 12:53:56.360 contentOffset - {0, 0}
2014-03-20 12:53:56.360 contentSize - {320, 423}
2014-03-20 12:53:56.361 contentInset - {0, 0, 0, 0}
2014-03-20 12:53:56.361 frame - {{0, 156}, {320, 423}}

【问题讨论】:

  • 什么是 NSLog(@"%@", NSStringFromCGRect(self.frame)) ?
  • 而不是 self.frame 尝试 self.bounds

标签: ios objective-c cocoa-touch uiview uiscrollview


【解决方案1】:

试试self.bounds,而不是self.frame

Frame 是相对于 superview 的位置。但边界从 (0,0) 开始

【讨论】:

    【解决方案2】:

    我猜是这样的:

    self.scrollView = [[UIScrollView alloc]initWithFrame:self.frame];
    

    应该是:

    self.scrollView = [[UIScrollView alloc]initWithFrame:self.bounds];
    

    注意您的打印输出是这样的:frame - {{0, 156}, {320, 423}}

    这意味着您的滚动视图不是从顶部开始,而是从 156px 开始

    self.bounds 将始终包含 {{0, 0}, {<view-width>, <view-height>}}

    【讨论】:

      【解决方案3】:

      可能是您的父控制器的框架不正确,只需使用

      进行检查
      NSLog(@"%@", NSStringFromCGRect(self.frame));
      

      然后看看控制台显示什么?

      如果不合适就手动设置scrollView的frame,

      self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0, 320, self.frame.size.height)];
      

      【讨论】:

      • 这应该是评论而不是答案,请删除它或添加可以回答问题的内容
      • @SimonMcLoughlin - 现在检查.. 这不是评论 :) 谢谢队友 :)
      猜你喜欢
      • 2020-08-09
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多