11

最近、Xcode 4.5(iOS 6) をダウンロードしましたが、プロジェクトの 1 つを続行しようとすると、UIScrollView が正しく機能していないことに気付きました。より明確に説明させてください。

UIScrollView を作成し、次のコードを使用して初期化を追加しました。

-(void)viewDidLoad{

    [mainScrollView setScrollEnabled:YES];
    mainScrollView.contentSize = CGSizeMake(480, 0);

    [super viewDidLoad];

}

XIBを開いてmainScrollViewUIScrollViewにリンクした後、いくつかのUIButtonをscrollViewに追加した後、プロジェクトをビルドしたときmainScrollViewにスクロールしていましたが、ボタンが表示されませんでした。画面上。何が間違っていますか?UIScrollView をセットアップするにはどうすればよいですか?

4

6 に答える 6

39

xcode 4.5を使用している場合は、ファイル インスペクタでscrollView「 」のチェックを外す必要があります。use AutoLayout

AutoLayoutまたは、「使用」したい場合は、 .m(実装)ファイルにこれを追加します

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    theScroller.contentSize=CGSizeMake(1024.0,1300.0);
}
于 2012-09-30T11:18:12.907 に答える
4

XCode 4.5の自動レイアウトでそれを行うことができますが、viewDidAppearでUIScrollViewを構成します

これは、画像を含む静的 UITableView でも行います。

画像に timg1.png、timg2.png などの名前を付けます。

ControllerView.h ファイルで

@property (weak, nonatomic) IBOutlet UIScrollView *Sv1;
@property (weak, nonatomic) IBOutlet UIPageControl *Pc1;

ControllerView.m ファイルで

-(void)viewDidAppear:(BOOL)animated
{

    //Scrollview
    Sv1.delegate = self;

    Sv1.contentSize = CGSizeMake(260, 176);

    [self.Sv1 setBackgroundColor:[UIColor clearColor]];
    // ScrollViewGarten.frame = CGRectMake(9, 11, 283, 170);
    [Sv1 setCanCancelContentTouches:NO];

    Sv1.multipleTouchEnabled = NO;
    Sv1.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    Sv1.clipsToBounds = YES;
    Sv1.scrollEnabled = YES;
    Sv1.pagingEnabled = YES;

    NSUInteger nimagesTextil = 0;
    CGFloat cxTextil = 0;
    for (; ; nimagesTextil++) {
        NSString *imageNameTextil = [NSString stringWithFormat:@"timg%d.png", (nimagesTextil + 1)];
        UIImage *imageTextil = [UIImage imageNamed:imageNameTextil];
        if (imageTextil == nil) {
            break;
        }
        UIImageView *imageViewTextil = [[UIImageView alloc] initWithImage:imageTextil];

        CGRect rect = imageViewTextil.frame;
        rect.size.height = 176;
        rect.size.width = 260;
        rect.origin.x = ((Sv1.frame.size.width - imageTextil.size.width) / 2) + cxTextil;
        rect.origin.y = ((Sv1.frame.size.height - imageTextil.size.height) / 2);

        imageViewTextil.frame = rect;

        [Sv1 addSubview:imageViewTextil];

        cxTextil += Sv1.frame.size.width;
    }
    self.Pc1.numberOfPages = nimagesTextil;
    [Sv1 setContentSize:CGSizeMake(cxTextil, [Sv1 bounds].size.height)];
    self.Pc1.currentPage = 0;

}
于 2012-10-31T15:02:45.553 に答える
4

これを間違って入力しただけかもしれませんCGSizeが、高さは 0 ですか?

于 2012-06-25T00:05:16.430 に答える
3

これはXcode4.5またはiOS6SDKのバグだと思います。私がそれを修正した方法は、プログラムでサブビューをUIScrollViewに追加することでした。

したがって、次のようなことを行う必要があります。

- (void)viewDidLoad {

    [super viewDidLoad];

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(400.0f, 10.0f, 60.0f, 30.0f);
    [mainScrollView addSubView:button];
    mainScrollView.contentSize = CGSizeMake(480.0f, mainScrollView.frame.size.height);
}

これを試して、これがあなたのために働いたかどうか私に知らせてください。

古いバージョンのXcodeを使用している場合は、コードとペン先を複製して結果を確認することをお勧めします。

于 2012-08-18T19:57:20.030 に答える
3

これを修正して AutoLayout を使用する場合は、contentSizeコードをviewDidAppearメソッドに移動します。この SO の質問で答えを見つけました: iOS 6 で自動レイアウトを使用して ScrollView に ImageView を埋め込む

于 2012-10-05T10:15:24.823 に答える
0

私は次のようにします:

-(void)viewDidLayoutSubviews
{
[self.scrollview setScrollEnabled:YES];
[self.scrollview setUserInteractionEnabled:YES];
[self.scrollview setContentSize:CGSizeMake(320, _y)];
[self.scrollview setAlwaysBounceVertical:YES];
}

すべてのサブビューの高さを追加するため、クラス変数 _y を使用します。

于 2013-06-12T08:30:21.620 に答える