iOS 7 UIScrollView height not change - ios

On an iPhone I have a UIViewController with a UIScrollView and I am having problems setting the height.
[_scrollView setScrollEnabled:YES];
//[_scrollView setContentSize:_viewController.frame.size];
_scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width, 700);
NSLog([NSString stringWithFormat:#"%f", _scrollView.frame.size.height]);
NSLog reports 574.000000
I have done this on iPad development and works fine

If you want to make the frame of the scroll view bigger, use
[_scrollView setFrame:newfram];
If you want to set the scrolling area inside the scrollView to be bigger, use
[_scrollView setContentSize:CGSizeMake(_scrollView.frame.size.width, _scrollView.frame.size.height + 300)]; // ) was missing
the previous example adds 300 pixels of extra space to the scroll view. The scroll view will only scroll how you are expecting if the content size is larger than the frame.

The NSLog is correct. The frame.height and contentSize.height properties relate to two different things...
You can think of scrollView.frame.height as the size of the frame in which content appears.
Then consider scrollView.contentSzie.height to be the size of the content displayed within the frame
Hope this helps

Related

Scrollview come back on same position in up and down direction whenever leave scrolling

I am using UIScrollview and set it's content size same as view's height.
I need to make my scrollview scrolls same in both side (Up / Down).
It will come back in same position I mean whenever we scrolls in top direction and leave scrolling it will come y = 20 pixels so when we scroll in bottom direction it will come back on the 20 pixels when we leave scrolling...
For setting scrollview content size
CGSize scrollViewContentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
[self.scrollViewBg setContentSize:scrollViewContentSize];
Also I have tried to give content offset
[scrollViewBg setContentOffset:CGPointMake(0, 0) animated:YES];
but not solved my problem.
I just updated and make scrollview's height similar to view's height and increase it's content height like this and it solved my problem.
-(void)viewDidAppear:(BOOL)animated{
float space = 2.5; // This is for making scroll view scrolls and on same positions from both sides.
CGSize scrollViewContentSize = CGSizeMake(self.view.frame.size.width,
self.view.frame.size.height+space);
[self.scrollViewBg setContentSize:scrollViewContentSize];
[scrollViewBg setContentOffset:CGPointMake(0, 0) animated:YES];
}

Why is my UIWebView frame not resizing properly?

I did this exact same thing with a XIB and it works, but something is wrong with my storyboard version.
Here's my UIWebView Delegate code
#pragma mark - UIWebViewDelegate Protocol Methods
- (void)webViewDidFinishLoad:(UIWebView *)webView {
CGRect frame = webView.frame;
frame.size.height = webView.scrollView.contentSize.height;
_webView.frame = frame;
NSLog(#"Webview Frame height is %f", _webView.frame.size.height);
_scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, _headerImageView.frame.size.height + webView.frame.size.height);
NSLog(#"scrollview content height is %f", _scrollView.contentSize.height);
}
NSLog is showing proper webview frame height of about 800 points. Scrollview content size is perfect about 1000 points.
My Scrollview is set to have a red background. So you can see here the webview frame is only about 500 points on screen and the rest of the content is getting cut off.
Any ideas? Thanks!
The problem is that auto layout is responsible for both the frame of the web view and the content size of the scroll view. You can set them, and of course if you then read them, you read what you just set; but you're just misleading yourself, because then (outside your method) auto layout comes along and sets them for real, and what you are seeing (as opposed to your meaningless NSLog readings) is the result of auto layout's settings. You need to configure your constraints properly so that auto layout does what you want it to do.
Auto layout wasn't turned on in the .xib file, so you didn't encounter this behavior. But it's turned on in your storyboard.

Can't add a UIScrollView to a part of the view

Inside a UIViewController, I need to have the bottom half scrollable. So I added a UIScrollView and positioned it halfway down the view's height. And in the viewDidAppear method, I have put the below two code lines to make it scrollable.
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.scrollView.frame.size.height);
self.scrollView.frame = self.view.frame;
This way works if the scroll view fills the entire view, I've tested. But this method didn't work for my need. The scroll view would automatically move up and take up the entire screen. I assumed it was the second line of code which causes this.
So I removed the scroll view, added two UIViews to the view controller. To the bottom view, I added the UIScrollView. And in the viewDidAppear method, I have put the same two code lines changing the second line to refer the frame of the UIView that contains the scroll view..
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.scrollView.frame.size.height);
self.scrollView.frame = self.containerView.frame;
But it wouldn't scroll either.
Can anyone please tell me how to do this correctly?
Thank you.
Dude, you keep setting the frame of the scrollView to something completely different from what you're actually trying to achieve.
If all you want to do is setup your scroll view so that it only occupies half the space then why dont you just set the frame so that the height only covers the portion of the screen that you want it to cover; and then set the x & y coordinates so that you draw the scroll view from the right position.
Do something like this:
//Shortcut to view's frame.
CGRect viewsFrame = self.view.frame;
/**
CGRectMake takes 4 parameters: x, y, width, height
x: is set to 0 since you want the scrollview to start from the left with no margin
y: you want the y position to start half way, so we grab the view's height and divide by 2
width: you want your scrollview to span from left to right, so simply grab the view's width
height: you want your scrollview's height to be half of your screen height, so get view's height and divide by 2.
*/
CGRect frameForSV = CGRectMake(0, viewsFrame.size.height/2, viewsFrame.size.width, viewsFrame.size.height/2);
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:frameForSV];
[self.view addSubview:myScrollView];
Then set your content size not based on an ansolute value, its best to have it based on the size of the content that's actually inside your scrollview so that your scrollview always scrolls to cover all your content inside it.
Also, remember that your scrollview will only scroll if the contentsize is greater than the scrollview's frame
UPDATE 1 after reading your comment in this post simply comment out any code in your viewController.m file related to your scrollview since youre setting up everything in interface builder.
This is the result:

UIScrollView ContentSize Limited to the Size of the UIScollView

I have set the contentSize of the UIScrollView as follows:
self.scrollView.contentSize = CGSizeMake(320,800);
But as you can see in the image below it still displays one last line under the UITabbar. Why?
I am using iOS 7.
The scrollView's contentSize refers to the size of the content that can be scrolled through. For example you could have a contentSize height of 2000 px, because you have 2000 px worth of content to scroll through.
Your contentSize is not the problem; you indeed want it to be 800 (I'm assuming that's the height of all your text and graphics, not including the tab bar at the bottom.) What you want to change is the actual size of the scrollView object itself. Then the scrollView will be the correct height (something like scrnHeight - tabBarHeight) but the contentSize will still reflect the size of the content (the stuff inside the scrollView).
[self.scrollView setFrame:CGRectMake(self.scrollView.frame.origin.x,
self.scrollView.frame.origin.Y, 320, scrnHeight - tabBarHeight)];
self.scrollView.contentSize = CGSizeMake(320, 800);
And then you should be all set. Now it's possible that 800 isn't actually the number you want; the number you want is the exact height from the top of the scrollview to the very botom of that text at the bottom. But this is the idea :)

Scrolling Issues in IOS

Scroll view did not set content size if I set it using a dynamic variable i.e.
scrollView.contentSize=CGSizeMake(320,scrollView.frame.origin.y+120);
the scroll view size remains same after calling above method.
But if I set it using a number (integer or float) it gets changed but it gives a very strange effect on scrolling. Picture of effect is attached.
scrollView.contentSize=CGSizeMake(320,1000);
This is not allowing me to post image anyways a strange effect appears.
How I can get rid of it?
Please tell Whats going wrong or what I am missing?
Now i have got rannking upto 11 the image for effect is given here.
Before Increasing Content Size:
After Increasing Content Size on Scrolling follwing effect appears:
Select the Scroll View and view its Size Inspector window. Observe that its size is 320 , 713 points (in my case). If you do not see the same
size as what I have, this is a good time to adjust the size so that it is the same as mine. You will
need to use this value in your code
(void)viewDidLoad {
scrollView.frame = CGRectMake(0, 0, 320, 460);
[scrollView setContentSize:CGSizeMake(320, 713)];
[super viewDidLoad];
}
i think you should use frame.height to achieve your goal
the content size must be greater then frame size of scroll view for scroll
and you are using y origin of scroll view so may be that's the problem.
scrollView.contentSize=CGSizeMake(320,scrollView.frame.size.height+120);
In this line:
scrollView.contentSize=CGSizeMake(320,scrollView.frame.origin.y+120);
You are setting the scroll view's contentsize's height to scrollView.frame.origin.y+120.
Means, if your scroll view's frame is x=40, y=40, width = 500, height = 500. Then the scrollView.frame.origin.y+120 will be equal to 40 + 120 = 160. Which is less than your scrollview's height. So your scroll view won't scroll to up or down.
In the second line:
scrollView.contentSize=CGSizeMake(320,1000);
You are scroll view's content size's height to 1000. That is greater than the scroll view's height so it'll scroll to up and down.
Finally.......
The issue was scroll view increases width of scroll view indicator which shows on the screnn while scrolling. You have two options to get rid of this.
Disable vertical or horizotnal indicators which one causing problem, but this may cause some problem with scroll view content size in my case it caused a problem last cell was not being viewed.
2.Let it appear but make it out of screen by the following code snippet.
[myScrollView setScrollIndicatorInsets:UIEdgeInsetsMake(0.0, 0.0, 0, 320.0)];
this is working perfectly but scroll indicator is gone out of screen.

Resources