iOS - Scrollview的滚动条显示但不滚动内容

时间:2013-11-13 00:27:13

标签: ios iphone objective-c uiscrollview storyboard

我在我的应用程序故事板中的一个场景中包含了一个ScrollView。现在我对iOS中的很多东西都不熟悉,我刚刚设法让一个滚动条出现在场景中。问题是,虽然滚动条显示,但它不会滚动内容。

我在AppRequestViewController.h和AppRequestViewController.m中设置了ScrollView:

AppRequestViewController.h

@interface AppRequestViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

AppRequestViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.scrollView.contentSize=CGSizeMake(320,1000);

}

这是我的视图层次结构:

enter image description here

故事板中的场景:

enter image description here

模拟器中的滚动条显示但不能正常工作:

enter image description here

有人可以告诉我哪里出错了吗?感谢。

6 个答案:

答案 0 :(得分:3)

在iOS中为Storyboards设置ScrollView可能会有点混乱。在我的问题中设置ScrollView是正确的,但是很少有错误导致程序运行与预期不同。

首先,我发现的修复是取消选中File Inspector中的Set Autolayout。第二个是更正视图层次结构。为了测试我的修复,我将场景的内容更改为更简单的内容:使用View,ScrollView,嵌套视图和两个按钮。这是新的View层次结构:

enter image description here

ScrollView位于主视图之后的View层次结构之上。然后,我放置另一个View来保存其他View对象。我的程序首先不起作用的原因是因为ScrollView与其他对象处于同一级别,这就是它无法滚动内容的原因。

我还在AppRequestViewController.m的viewDidLoad方法中添加了其他设置:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.navigationController setNavigationBarHidden:YES];
    [self.scrollView setScrollEnabled:YES];
    self.scrollView.contentSize=CGSizeMake(320,800);

}

设置ScrollView非常简单,但可能令人困惑。我根据YouTube tutorial修复了我的程序。希望这会有所帮助。

答案 1 :(得分:1)

我猜,setContentSize:在viewWillAppear:或viewDidAppear:将解决您的问题。

- (void)viewDidLoad
{
    [super viewDidLoad];

 // relocate this line
 // self.scrollView.contentSize=CGSizeMake(320,1000);

}

...

- (void)viewWillAppear:(BOOL) animated
{
    [super viewWillAppear:animated];
    self.scrollView.contentSize=CGSizeMake(320,1000);

}

答案 2 :(得分:0)

看来滚动视图已超出屏幕。您是否将滚动视图的autoResizesSubviews属性设置为true,将autoresizingMask设置为UIViewAutoresizingFlexibleWidth| UIViewAutoresizingFlexibleWidth。如果您使用auto layout,请设置适当的约束。

答案 3 :(得分:0)

可滚动内容应该是scrollview的子视图。您需要先检查视图的层次结构。之后,您可以使用下面的代码来比较ViewController中的视图大小和内容大小。

- (void)viewWillLayoutSubviews
{
    NSLog(@"scrollview size : %@", NSStringFromCGSize(self.scrollView.frame.size));
    NSLog(@"content size : %@", NSStringFromCGSize(self.scrollView.contentSize));
}

内容大小应大于滚动视图的帧大小。

答案 4 :(得分:0)

使用viewDidAppear代替viewDidLoad。它肯定会奏效。

(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self.scrollView setContentSize:CGSizeMake(...)];
}

答案 5 :(得分:0)

您的内容大小对于滚动视图是正确的,但请检查故事板中视图控制器的大小。 将视图控制器的模拟大小从自由设置为固定。 我认为它可以帮助您解决问题。