【问题标题】:Xcode Scrollview issue when using storyboards and Push使用情节提要和推送时的 Xcode Scrollview 问题
【发布时间】:2013-11-06 17:41:07
【问题描述】:

我对 xcode 还很陌生,并且遇到了滚动视图的问题。滚动视图工作正常......但是当使用情节提要和推送组合时我遇到了问题。第一次查看滚动视图时它工作正常,但是当您推送到新页面然后返回故事板时滚动视图不再滚动。我认为这与 didload 有关,也许我应该使用 willappear?代码如下。我想我需要以某种方式更改此代码,以便每次返回此情节提要时都会重新加载情节提要...有其他人遇到此问题或建议如何解决吗?

//
//  PrintViewController.m
//
//

#import "PrintViewController.h"

@interface PrintViewController ()

@end

@implementation PrintViewController
@synthesize PrintScroller, rememberContentOffset;

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

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

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

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

}

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

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

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



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

@end

【问题讨论】:

  • 抱歉,为什么要记住偏移量?你回来的她不一样吗?

标签: ios objective-c uiscrollview xcode5


【解决方案1】:

我怀疑你的问题在这里:

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

当用户滚动时,系统可能会重复调用此方法。由于您每次都设置内容偏移量,因此视图不会移动。您应该只执行一次,然后将self.rememberContentOffset 设置为CGPointZero,然后如果记住的偏移量为零,则避免更改内容偏移量。比如:

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

【讨论】:

  • 好的,我已经粘贴了你的代码,所以它现在读取如上,但是从滚动视图中的按钮返回初始视图时它仍然不滚动?我是否需要删除 .m 文件中的任何其他代码,因为您提到只执行一次?同样在我的 .h 文件中,我有 #import <UIKit/UIKit.h> @interface PrintViewController : UIViewController @property (strong, nonatomic) IBOutlet UIScrollView *PrintScroller; @property (assign) CGPoint rememberContentOffset; @end 这可以吗?
  • 实际上您的代码运行良好。如果您禁用我认为不理想的自动布局?
  • 如果您在打开自动布局时遇到问题,您可能在某个地方遇到了您不想要的约束。 Apple 有一个很好的关于调试自动布局的文档,我强烈推荐阅读。
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 2012-12-05
  • 2012-02-21
  • 2015-04-17
相关资源
最近更新 更多