19

我有一个在 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

请帮忙!我被困住了!

最好的祝福!

4

9 回答 9

50

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

在此处输入图像描述在此处输入图像描述

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

于 2013-09-20T16:28:49.870 回答
28

如user2394787所述:

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

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

这将使它工作。

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

于 2013-10-03T18:05:38.703 回答
7

我刚刚通过转到编辑器 > 解决自动布局问题 > 在视图控制器中添加缺少的约束来解决它

希望这可以帮助。

于 2013-09-22T09:26:10.407 回答
6

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

点击

并在属性检查器中设置它

勾选那个标准

我希望它有所帮助。谢谢。

于 2013-12-04T03:44:38.673 回答
2

我不确定这是否可行

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
}
于 2013-09-11T21:52:37.173 回答
2
- (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));
}
于 2015-09-18T08:54:49.820 回答
0

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

CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height);
[self.scrollView setContentSize:scrollViewContentSize];
于 2014-02-20T10:34:40.773 回答
0

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

于 2014-07-17T07:52:30.053 回答
0

在为 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 并为滚动视图中的所有子视图设置约束,以便设置垂直线的约束,从滚动视图的顶部到底部。

于 2014-10-20T15:04:31.653 回答