【问题标题】:UIScrollView doesn't scroll after upgrading to iOS7 / xcode 5升级到 iOS7/xcode 5 后 UIScrollView 不滚动
【发布时间】:2013-09-16 02:24:52
【问题描述】:

我有一个在 xcode 4.5 和 ios 6.1 中滚动时运行良好的应用程序。 但是,在下载 xcode 5 和 iOS 7 后,我的滚动视图不再起作用。???

这是我的 .h 文件:

#import <UIKit/UIKit.h>

@interface GrillretterViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIScrollView *grillretterScroller;
@property (assign) CGPoint rememberContentOffset;

@end

这是我的 .m 文件:

#import "GrillretterViewController.h"

@interface GrillretterViewController ()

@end

@implementation GrillretterViewController
@synthesize grillretterScroller, rememberContentOffset;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [grillretterScroller setScrollEnabled:YES];

    // Do any additional setup after loading the view.
}

- (void) viewDidAppear:(BOOL)animated {
    [grillretterScroller setContentSize:CGSizeMake(300, 915)];

}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];
    self.grillretterScroller.contentOffset = CGPointMake(0, 0);
}

- (void)viewWillDisappear:(BOOL)animated {
    self.rememberContentOffset = self.grillretterScroller.contentOffset;
    [super viewWillDisappear:animated];
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.grillretterScroller.contentOffset = CGPointMake(0, self.rememberContentOffset.y);
}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

请帮忙!我被困住了!

最好的问候!

【问题讨论】:

  • 我正在使用情节提要,您所说的检查您的 xib 文件是什么意思?在视图中我启用了滚动-是的:)
  • 好吧,要知道ScrollView是否连接到IBOutlet
  • 所有已连接 - 在 xcode 5 中打开项目后,我没有更改任何连接或代码。
  • 您应该在所有这些方法中进行超级调用。此外,请确保启用用户交互。
  • 我刚刚在最后一个方法中添加了超级调用。但是没有运气:(我在哪里可以检查是否启用了用户交互?

标签: objective-c uiscrollview scrollview ios7 xcode5


【解决方案1】:

我通过在滚动视图的主视图的文件检查器窗格中取消选择“使用自动布局”解决了这个问题。

如果您想启用“自动布局”,请尝试“编辑器 -> 解决自动布局问题 -> 添加缺失的约束”。关键约束似乎是“底部空间到:Superview,在我的情况下是 -300,在视图底部提供 300 个滚动空间。

【讨论】:

  • 这对我也有用......我很确定你的答案应该被标记为“正确”
  • 您将失去故事板中每个视图控制器中自动布局的所有好处。我怀疑这是大多数人的选择。
  • 这成功了!但是,所有视图控制器都禁用了自动布局,这会产生一些不同的问题。但是解决了这个问题。 :) 谢谢
  • 这不是禁用自动布局功能的正确解决方案。
  • Satyam svv,也许您发布了您的“正确”解决方案?以上是我的工作方式,可能并不适合所有人!
【解决方案2】:

正如 user2394787 所说:

选择具有滚动视图的视图控制器,然后转到

Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller].  

这将使它工作。

我试图投票支持上述答案,但没有足够的代表。

【讨论】:

  • 这就是答案的人!!!!它适用于 IOS7/XCODE5 - 我再说一遍。要使用情节提要创建一个没有代码的工作滚动视图,请按照此线程上接受的答案给出的指示:stackoverflow.com/questions/8809984/…,然后执行编辑器->解决自动布局问题->添加缺少的约束,它将起作用。
【解决方案3】:

我刚刚解决了这个问题 编辑器 > 解决自动布局问题 > 在视图控制器中添加缺少的约束

希望这会有所帮助。

【讨论】:

  • 是的,这非常有效。删除自动布局不是人们应该做的。
【解决方案4】:

我只是将“垂直空间”设置为自动常量值。在某些情况下可能会有所帮助。

并在属性检查器中设置它

希望对你有帮助。谢谢。

【讨论】:

    【解决方案5】:

    我不确定这是否可行

    - (void) viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
        [grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
    }
    

    【讨论】:

    • TobiasLindgreen 请将答案更改为@Jim Holland 发布的答案
    【解决方案6】:
    - (void)viewDidLayoutSubviews {
        [self performSelector:@selector(updateContentSize)
                   withObject:nil
                   afterDelay:0.25];
    
    }
    
    -(void)updateContentSize{
        UIView *viewLast = [viewContent viewWithTag:100];
        scrollViewAd.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, CGRectGetMaxY(viewLast.frame));
    }
    

    【讨论】:

      【解决方案7】:

      我没有固定高度,所以我根据我在滚动视图中的标签在代码中设置滚动视图的内容大小

      CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height);
      [self.scrollView setContentSize:scrollViewContentSize];
      

      【讨论】:

      • 确保 scrollView.contentSize 不为 0。
      【解决方案8】:

      启用自动布局后,请确保在 UIScrollView 及其子视图之间应用垂直间距 (@"V:|-[subview]-|")。如果您的 scrollView 用于水平滚动,请应用 Horizo​​ntal Spacing (@"H:|-[subview]-|")。

      【讨论】:

        【解决方案9】:

        在为 iOS8 开发应用程序后,我遇到了同样的问题,然后在 iOS7 上进行了测试。 虽然我曾尝试在滚动视图上设置某些选项,例如:

        [self.scrollView setScrollEnabled:YES];
        [self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 700)];
        [self.scrollView setContentOffset:CGPointZero];
        

        对我有用的解决方案是进入情节提要文件,并确保您为滚动视图中的所有视图设置了约束。滚动视图的内容大小是由滚动视图中每个子视图的约束来计算的,所以在我的例子中,我有一个 UIView 和 UITableView。在为 UIView(顶部、前导、尾随、高度)和 UITableView(与 UIView 的垂直间距、前导、尾随、底部)设置约束后,滚动视图计算出内容大小并开始运行。

        虽然关闭自动布局确实有效,但它并不是适合所有人的理想解决方案。只需使用 Storyboard 并为滚动视图中的所有子视图设置约束,以便设置垂直线的约束,从滚动视图的顶部到底部。

        【讨论】:

          猜你喜欢
          • 2013-07-17
          • 1970-01-01
          • 1970-01-01
          • 2013-12-17
          • 1970-01-01
          • 2013-11-04
          • 1970-01-01
          • 2014-01-27
          • 1970-01-01
          相关资源
          最近更新 更多