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

ストーリーボード + 自動レイアウトを使用したソリューション (コードなし):

左上隅から開始する垂直スクロールの例:

  • 最初のオブジェクト (サブビュー)のtop+leading制約を設定します
  • 最後のオブジェクトまですべてのオブジェクトを連鎖させる
  • 最も重要なのは、スクロール ビューに下の制約を設定して、上から下に接続されるようにすることです。
  • スクロール ビューの設定width- 特定の「マジック ナンバー」またはより良い方法のいずれか - 設定された幅を持つサブビューの末尾の制約を接続します - ない場合は、通常、ラベルの幅 = 画面幅 - サイド パディング =>標準を設定します(20)+ UILabel (280)+ standard (20) - このようにして、スクロール ビューはコンテンツの幅を正確に認識します。そうしないと、「あいまいな幅」という警告が表示されます。

*横スクロールが必要な場合は、制約の調整が必要です。

于 2014-08-09T05:39:43.820 に答える
2

スクロールビューのフレームはスクロール可能なサイズではありません。

contentSize を確認する

フレームをその superview.bounds に設定し、コンテンツ サイズを scroolview のスクロール可能領域に設定します。

また、背景がスクロールすることも知りません。

スクロールビュー自体にサブビューを追加する必要があります。

独自のサブビューをスクロールする必要があります。しかし、それ自体はスクロールしません:)

于 2012-12-29T00:14:46.213 に答える