如何更改 UIScrollView Xcode 的 ContentOffSet

Posted

技术标签:

【中文标题】如何更改 UIScrollView Xcode 的 ContentOffSet【英文标题】:how to change ContentOffSet of UIScrollView Xcode 【发布时间】:2014-07-12 12:15:44 【问题描述】:

我使用编程代码创建了一个UIScrollView,我的视图中有一个按钮(UIScrollView 中不存在)。

当我单击此按钮时,转到具有模态转换的下一页。我在下一页创建取消按钮,当我点击它返回主页时(此页面有UIScrollView)。

我想在单击取消按钮并返回主页时调用主页中的一个方法,并在此方法中更改 ContentOfSet 我的 ScrollView... 但不起作用!!!!

这是我的代码:

ma​​inView.m

- (void)viewDidLoad
    UIScrollView *scrollbar = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,width, height)];
    scrollbar.directionalLockEnabled = YES;
    scrollbar.backgroundColor = [UIColor whiteColor];
    scrollbar.maximumZoomScale = 1.0;
    scrollbar.minimumZoomScale = 1.0;
    scrollbar.clipsToBounds = YES;
    scrollbar.showsHorizontalScrollIndicator = YES;
    scrollbar.pagingEnabled = YES;
    [scrollbar setContentSize:CGSizeMake(scrollbar.frame.size.width * 4,scrollbar.frame.size.height)];
    scrollbar.contentOffset = CGPointMake(0, 0);
    scrollbar.delegate = self;
    [self.view addSubview:scrollbar];

    [super viewDidLoad];


-(void)ChangeMainScrollContentOffset
    scrollbar.contentOffset = CGPointMake(scrollbar.frame.size.width * (3), 0);

此按钮位于根视图中:

- (IBAction)AddView:(id)sender
    AddStationController *add =  [[AddStationController alloc]initWithNibName:@"AddStationController" bundle:nil];
    [add setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
    [self.view.window.rootViewController presentViewController:add animated:YES completion:nil];

这个按钮是取消按钮,用于在我的主视图中返回:

- (IBAction)BackView:(id)sender
    mainView *main = [[mainView alloc]init];
    [main ChangeMainScrollContentOffset];

    [self dismissViewControllerAnimated:YES completion:nil];

请指导我! 我很困惑为什么不工作 ContentOffSet !!!

【问题讨论】:

【参考方案1】:

我认为你的问题是你没有添加 ChangeMainScrollContentOffset 方法添加到您的 ViewController.h 文件中。

只需将它添加到 ViewController.h 文件中,然后调用它。

【讨论】:

我的朋友我在mainView中添加了这个方法【参考方案2】:

你的第二个 viewController 应该有对前一个 view controller 的引用。

当你这样做时:

mainView *main = [[mainView alloc]init];
[main ChangeMainScrollContentOffset];

您创建另一个不在屏幕上的 mainView 实例并更改 ANOTHER scrollView 上的 contentOffset :)

您应该将属性委托添加到您的 AddStationController

AddStationController.h

@property (nonatomic, weak) mainView* delegate;

主视图

- (IBAction)AddView:(id)sender
    AddStationController *add =  [[AddStationController alloc]initWithNibName:@"AddStationController" bundle:nil];
    >> add.delegate = self; <<
    [add setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
    [self.view.window.rootViewController presentViewController:add animated:YES completion:nil];

取消按钮操作

- (IBAction)BackView:(id)sender

    >> [self.delegate ChangeMainScrollContentOffset]; <<
    [self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

我的朋友,我的 ScrollView 在 mainView 中,添加按钮是 rootView,取消按钮在 AddStationController 中!!!编写代码时出现此错误:libc++abi.dylib: terminating with uncaught exception of type NSException 如此奇怪的架构...无论如何,您应该在 AddStationController 中有对 MainView 实例的引用。 我不知道该怎么做,请用代码指导我 按下添加按钮会发生什么?你的 rootViewController 中有没有对 mainView 的引用? 阅读:prateekvjoshi.com/2014/02/16/…

以上是关于如何更改 UIScrollView Xcode 的 ContentOffSet的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:如何在 UIScrollView 中从 XIB 文件添加自定义视图

自定义 UIScrollView 滚动条颜色?

如何将 UIScrollView 移动一帧的宽度? (Xcode,斯威夫特)

Xcode 水平 UIScrollView

如何将按钮和图像放入 UIScrollView [关闭]

如何更改 UIScrollView 的位置和大小?