【问题标题】:UIScrollView in iOS 6iOS 6 中的 UIScrollView
【发布时间】:2012-06-26 06:37:29
【问题描述】:

最近我下载了 Xcode 4.5(iOS 6),但是当我尝试继续我的一个项目时,我注意到 UIScrollView 无法正常工作,让我更清楚地解释一下:

我已经创建了 UIScrollView 并使用以下代码添加了初始化它:

-(void)viewDidLoad{

    [mainScrollView setScrollEnabled:YES];
    mainScrollView.contentSize = CGSizeMake(480, 0);

    [super viewDidLoad];

}

在我打开我的 XIB 并将 mainScrollView 链接到 UIScrollView 之后,在我将一些 UIButton 添加到 scrollView 之后。当我构建项目时,mainScrollView 正在滚动但按钮没有出现,我的意思是,我只能看到屏幕上已经存在的按钮。我做错了什么?如何设置 UIScrollView?

【问题讨论】:

  • 我刚才也遇到了同样的问题。这可能是 iOS6 SDK 中的错误吗?

标签: iphone xcode uiscrollview ios6


【解决方案1】:

也许您只是输入错误,但您的 CGSize 的高度为 0?

【讨论】:

  • 只是为了禁用垂直滚动!
  • 你不能在 IB 中禁用它吗?还是只使用属性?将 CGSize 宽度设置为 0 听起来是个坏主意。
  • 如果要禁用垂直滚动,请将内容高度设置为与滚动视图的大小相同并关闭垂直弹跳。
  • 两种方式都有效,但我的问题 id 不同!就像,当我滚动 UIButton 时保持惰性,就像它们不在 UIScrollView 内,就像在主视图内一样!
  • 你为什么不尝试记录按钮的超级视图?
【解决方案2】:

我相信这是 Xcode 4.5 或 iOS 6 SDK 的错误。我修复它的方法是以编程方式将子视图添加到我的 UIScrollView 中。

所以你必须这样做:

- (void)viewDidLoad {

    [super viewDidLoad];

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(400.0f, 10.0f, 60.0f, 30.0f);
    [mainScrollView addSubView:button];
    mainScrollView.contentSize = CGSizeMake(480.0f, mainScrollView.frame.size.height);
}

试试这个,让我知道这是否适合你。

如果您有旧版本的 Xcode,最好复制代码和那里的 nib 以查看结果。

【讨论】:

    【解决方案3】:

    对于xcode 4.5,如果您使用的是scrollView,则必须在文件检查器中取消选中“use AutoLayout”。

    或者如果你想“使用AutoLayout”,那么在.m(implementation)文件中添加这个

    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        theScroller.contentSize=CGSizeMake(1024.0,1300.0);
    }
    

    【讨论】:

    • 谢谢谢谢谢谢!!用这个把我的头撞在砖墙上一个小时或更长时间。再次感谢您。
    • 好的,所以 AutoLayout 的答案在这里找到:stackoverflow.com/questions/12619786/… 基本上,将contentSize 代码移动到viewDidAppear 方法。
    • 感谢您的这篇文章!!!!我真的为此烧了一整天。我取消选中“使用自动布局”,最后我的滚动视图按预期工作。把我烧了……又是TY
    【解决方案4】:

    如果您想解决此问题并使用 AutoLayout,请将您的 contentSize 代码移至 viewDidAppear 方法。我在这个 SO 问题中找到了答案:Embed ImageView in ScrollView with Auto Layout on iOS 6

    【讨论】:

      【解决方案5】:

      您可以在 XCode 4.5 中使用自动布局来实现 但是你在 viewDidAppear 中配置你的 UIScrollView

      我也在带有图像的静态 UITableView 中执行此操作。

      将您的图像命名为 timg1.png、timg2.png....

      在你的 ControllerView.h 文件中

      @property (weak, nonatomic) IBOutlet UIScrollView *Sv1;
      @property (weak, nonatomic) IBOutlet UIPageControl *Pc1;
      

      在您的 ControllerView.m 文件中

      -(void)viewDidAppear:(BOOL)animated
      {
      
          //Scrollview
          Sv1.delegate = self;
      
          Sv1.contentSize = CGSizeMake(260, 176);
      
          [self.Sv1 setBackgroundColor:[UIColor clearColor]];
          // ScrollViewGarten.frame = CGRectMake(9, 11, 283, 170);
          [Sv1 setCanCancelContentTouches:NO];
      
          Sv1.multipleTouchEnabled = NO;
          Sv1.indicatorStyle = UIScrollViewIndicatorStyleWhite;
          Sv1.clipsToBounds = YES;
          Sv1.scrollEnabled = YES;
          Sv1.pagingEnabled = YES;
      
          NSUInteger nimagesTextil = 0;
          CGFloat cxTextil = 0;
          for (; ; nimagesTextil++) {
              NSString *imageNameTextil = [NSString stringWithFormat:@"timg%d.png", (nimagesTextil + 1)];
              UIImage *imageTextil = [UIImage imageNamed:imageNameTextil];
              if (imageTextil == nil) {
                  break;
              }
              UIImageView *imageViewTextil = [[UIImageView alloc] initWithImage:imageTextil];
      
              CGRect rect = imageViewTextil.frame;
              rect.size.height = 176;
              rect.size.width = 260;
              rect.origin.x = ((Sv1.frame.size.width - imageTextil.size.width) / 2) + cxTextil;
              rect.origin.y = ((Sv1.frame.size.height - imageTextil.size.height) / 2);
      
              imageViewTextil.frame = rect;
      
              [Sv1 addSubview:imageViewTextil];
      
              cxTextil += Sv1.frame.size.width;
          }
          self.Pc1.numberOfPages = nimagesTextil;
          [Sv1 setContentSize:CGSizeMake(cxTextil, [Sv1 bounds].size.height)];
          self.Pc1.currentPage = 0;
      
      }
      

      【讨论】:

        【解决方案6】:

        我会这样做:

        -(void)viewDidLayoutSubviews
        {
        [self.scrollview setScrollEnabled:YES];
        [self.scrollview setUserInteractionEnabled:YES];
        [self.scrollview setContentSize:CGSizeMake(320, _y)];
        [self.scrollview setAlwaysBounceVertical:YES];
        }
        

        我使用类变量_y,因为我将所有子视图高度添加到它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-18
          • 1970-01-01
          • 1970-01-01
          • 2014-01-04
          • 1970-01-01
          相关资源
          最近更新 更多