8

所以,我知道我也有类似的问题,但可能并不准确(所以请不要给我打分——只是警告我什么的)。我已经搜索了几天来解决这个简单的问题。使用故事板、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 注释掉没有任何区别。

编辑:我在下面发布了解决方案。希望它能帮助别人!

4

3 回答 3

39

经过几天的研究,有趣的是,我实际上在发布此问题后几分钟就找到了解决方案!所以,对于我的情况,我只需要添加这段代码,它就起作用了:

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

它现在似乎工作得很好。任何人,请让我知道这是否是一种糟糕的做法,因为我是新手,我希望能得到任何帮助。否则,我会留下它,希望这可以帮助其他人!谢谢!

于 2012-12-29T00:30:01.850 回答
3

使用 Storyboard + Autolayout 的解决方案(无代码):

从左上角开始的垂直滚动示例:

  • 设置第一个对象(子视图)的top+leading约束
  • 链接每个对象直到最后一个
  • 重要的 - 将底部约束设置为滚动视图,使其从上到下连接。
  • 设置width滚动视图的 - 一个特定的“幻数”或更好的方法 - 连接具有设置宽度的子视图的尾随约束 - 如果没有我通常设置标签的宽度 = 屏幕宽度 - 侧边距 =>标准(20)+ UILabel (280)+标准(20) - 这样滚动视图就可以准确地知道其内容的宽度,否则您将收到“不明确的宽度”警告。

*如果需要水平滚动,需要对约束进行调整。

于 2014-08-09T05:39:43.820 回答
2

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

查看内容大小

将 frame 设置为其 superview.bounds 然后将 content size 设置为 scoolview 的可滚动区域。

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

您需要将子视图添加到滚动视图本身。

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

于 2012-12-29T00:14:46.213 回答