Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding UIScrollView to a UIViewController

I have a UIViewController, and I want to add a UIScrollView to it (enable scroll support), is it possible?

I know it is possible, if you have a UIScrollView to add a UIViewController to it, but I'm interested also if reverse was true, if I cann add a UIScrollView to an existing UIViewController, such that I get scrolling feature.

Edit

I think I have found an answer: Adding a UIViewController to UIScrollView

like image 716
user1903992 Avatar asked Dec 27 '12 14:12

user1903992


People also ask

How do I add scroll view to existing view?

1) Go to the viewcontroller on the storyboard and click on something in it and press Command + A. This will select all the elements in the view. 2) Go to Editor -> Embed In -> Scroll View. This will embed all the labels, views, etc into a scrollView.

What is content offset?

contentOffset is the point at which the origin of the content view is offset from the origin of the scroll view. In other words, it is where the user has currently scrolled within the scroll view. This obviously changes as the user scrolls.


1 Answers

An UIViewController has a view property. So, you can add a UIScrollView to its view. In other words, you can add the scroll view to the view hierarchy.

This is can achieved by code or through XIB. In addition, you can register the view controller as the delegate for your scroll view. In this way, you can implement methods for performing different functionalities. See UIScrollViewDelegate protocol.

// create the scroll view, for example in viewDidLoad method
// and add it as a subview for the controller view

[self.view addSubview:yourScrollView];

You could also override loadView method for UIViewController class and set the scroll view as the main view for the controller you are considering.

Edit

I created a little sample for you. Here, you have a scroll view as a child of the view of a UIViewController. The scroll view has two views as children: view1 (blue color) and view2 (green color).

Here, I suppose you can scroll in only one direction: horizontally or vertically. In the following, if you scroll horizontally, you can see that the scroll view works as expected.

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    scrollView.backgroundColor = [UIColor redColor];
    scrollView.scrollEnabled = YES;
    scrollView.pagingEnabled = YES;
    scrollView.showsVerticalScrollIndicator = YES;
    scrollView.showsHorizontalScrollIndicator = YES;
    scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2, self.view.bounds.size.height);    
    [self.view addSubview:scrollView];

    float width = 50;
    float height = 50;
    float xPos = 10;
    float yPos = 10;

    UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(xPos, yPos, width, height)];
    view1.backgroundColor = [UIColor blueColor];    
    [scrollView addSubview:view1];

    UIView* view2 = [[UIView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width + xPos, yPos, width, height)];
    view2.backgroundColor = [UIColor greenColor];    
    [scrollView addSubview:view2];
}

If you need to scroll only vertically you can change as follows:

scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height * 2);

Obviously, you need to rearrange the position of view1 and view2.

P.S. Here I'm using ARC. If you don't use ARC, you need to explicitly release alloc-init objects.

like image 109
Lorenzo B Avatar answered Nov 03 '22 22:11

Lorenzo B