为什么添加对象后UIScrollView不能完全滚动? 使用故事板,ARC和Xcode 4.5.2

所以,我知道也有类似的问题,但也许不准确(所以请不要标记我 – 只是警告我什么的)。 我已经search了解决这个简单问题的日子。 使用故事板,ARC和Xcode 4.5.2,我只需要在UIScrollView中放置一堆标签并垂直滚动。 我已经在viewDidLoad,viewDidAppear和viewWillAppear中尝试了很多设置框架大小和内容大小的组合,但无济于事。 滚动视图在内部没有任何内容的情况下完全滚动,但是当我为其添加标签时,滚动仅滚动很短的部分。

注意:我需要使用自动布局,否则我的整个项目会搞砸。

这是我现在的代码

.h文件:

#import <UIKit/UIKit.h> @interface MortgageRatesViewController : UIViewController <UIScrollViewDelegate, UIScrollViewAccessibilityDelegate> - (IBAction)backButton:(id)sender; @property (strong, nonatomic) IBOutlet UIView *mortgageView; @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @end 

.m文件:

 #import "MortgageRatesViewController.h" @interface MortgageRatesViewController () @end @implementation MortgageRatesViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } //------------------------------------------------------- - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"appBackgroundColor.png"]]; [self.scrollView setScrollEnabled:YES]; [self.scrollView setContentSize:CGSizeMake(0, 809)]; } //--------------------------------------------------------------- //--------------------------------------------------------------- //-(void)viewWillAppear:(BOOL)animated{ // // // [super viewWillAppear:animated]; // // // [self.scrollView setFrame:CGRectMake(0, 0, 320, 808)]; // // //} //--------------------------------------------------------------- -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.view addSubview:self.scrollView]; [self.scrollView setScrollEnabled:YES]; [self.scrollView setContentSize:CGSizeMake(0, 809)]; } //------------------------------------------------------------- - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)backButton:(id)sender { [self dismissViewControllerAnimated:YES completion:NO]; } @end 

注意:有viewWillAppear注释已经没有区别。

编辑:我张贴在下面的解决scheme。 希望它帮助其他人!

经过几天的研究,这很有趣,我发现这个问题后几分钟就find了解决scheme! 所以,对于我的情况,我只需要添加这一点的代码,它的工作:

 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [self.scrollView setContentSize:CGSizeMake(320, 808)]; } 

现在看起来工作很完美。 请任何人,让我知道,如果这是一个糟糕的做法,因为我是新手,我会喜欢任何帮助。 否则,我会离开它,希望这可以帮助别人! 谢谢!

解决scheme与故事板+ Autolayout(无代码):

垂直滚动示例,从左上angular开始:

  • 设置第一个对象(子视图)的顶部+主要约束条件
  • 链接每个对象,直到最后一个
  • 最重要的 – 设置底部约束滚动视图,所以它是从上到下连接起来。
  • 设置滚动视图的width – 一个特定的“幻数”或更好的方法 – 连接具有设置宽度的子视图的尾部约束 – 如果没有,我通常设置一个标签的宽度=屏幕宽度 – 侧paddings => 标准 (20)+ UILabel (280)+ 标准 (20) – 这种方式滚动视图确切地知道它的内容的宽度,否则你会得到一个“模棱两可的宽度”的警告。

*需要水平滚动时需要调整。

您的滚动视图的框架不是可滚动的大小。

检查contentSize

将框架设置为其superview.bounds,然后将内容大小设置为scroolview的可滚动区域。

另外我不知道背景将滚动。

你会想要添加子视图的滚动视图本身。

它应该滚动自己的子视图。 但它不会自动滚动:)