UIScrollView in iOS 6

南楼画角 提交于 2019-12-09 04:42:39

问题


Recently i've downloaded Xcode 4.5(iOS 6),but when tried to continue one of my projects i noticed that the UIScrollView isn't working properly,let me explain more clearly:

I've created the UIScrollView and added the initialized it using the following code:

-(void)viewDidLoad{

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

    [super viewDidLoad];

}

After i opened my XIB and linked the mainScrollView to a UIScrollView,after i added some UIButton's to the scrollView.When i built the project the mainScrollView was scrolling but the buttons didn't showed up,i mean,i just could see the button that were already on the screen.What i'm doing wrong?How can i setup the UIScrollView?


回答1:


For xcode 4.5 ,If you are using scrollView you have to either uncheck "use AutoLayout" in file inspector.

or if you want to "use AutoLayout",then in .m(implementation) file add this

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    theScroller.contentSize=CGSizeMake(1024.0,1300.0);
}



回答2:


Maybe you just typed this wrong, but your CGSize has a height of 0?




回答3:


You can do it with Auto Layout in XCode 4.5 But you config your UIScrollView in viewDidAppear

I do this also in a static UITableView with images.

Name your images like timg1.png, timg2.png....

in your ControllerView.h File

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

In your ControllerView.m File

-(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;

}



回答4:


I believe this is a bug with either Xcode 4.5 or the iOS 6 SDK. The way I fixed it was by adding the subviews to my UIScrollView programatically.

So you would have to do something like:

- (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);
}

Try this and let me know if this worked for you.

If you have an old version of Xcode it might be a good idea to replicate the code and the nib over there to see the results.




回答5:


If you would like to fix this AND use AutoLayout, move your contentSize code to the viewDidAppear method. I found the answer in this SO question: Embed ImageView in ScrollView with Auto Layout on iOS 6




回答6:


I would do it like this:

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

I use the class variable _y since I add all the subviews heights to it.



来源:https://stackoverflow.com/questions/11182008/uiscrollview-in-ios-6

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!