Reputation: 375
I am new to objective-C programming.
I am using UIScrollView with some labels, image and text view on it.
I have turned off Autolayout and already tried with "Adjust scroll View Insets" on (situation described in title) and off (doesn't scroll).
This is what I insert into viewDidLoad:
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 687)];
But I must be missing something very simple.
Upvotes: 34
Views: 45692
Reputation: 16813
iOS 11 && 12
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
Upvotes: 29
Reputation: 807
I did below, my problem solved
changing UIScrollView Content Insets property in from Automatic
to Never
and Adding below code in viewDidLoad()
scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);`
Upvotes: 2
Reputation: 13611
After user interface orientation going to landscape, my UIScrollView shown its UIScrollIndicator being misplaced. To fix this, you need to add the following code.
As per iOS 13, yet supporting iOS 12 and earlier:
// Fixes the scroll indicator misplacement when rotated in landscape
if #available(iOS 13.0, *) {
v.automaticallyAdjustsScrollIndicatorInsets = false
} else {
// Fallback on earlier versions
v.contentInsetAdjustmentBehavior = .never
}
v.contentInset = .zero
v.scrollIndicatorInsets = .zero
Upvotes: 0
Reputation: 3397
This works for me,
_scrollView.scrollIndicatorInsets = UIEdgeInsetsZero;
_scrollView.contentOffset = CGPointMake(0.0, 0.0);
[_scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];
Upvotes: 0
Reputation: 17902
On iPhoneX this will also occur due to some non-sense safe area stuff that auto-layout tried to account for. Fix (for iPhoneX) with this:
if (@available(iOS 11.0, *)) {
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
Upvotes: 1
Reputation: 460
iOS 11
In my case only changing this UIScrollView Content Insets property in IB from Automatic
to Never
helped.
Upvotes: 29
Reputation: 2605
Actually, the margin has nothing to do with ScrollViewInsets
or contentOffset
. It's just a conflict between SuperView.Top
and SafeArea.Top
pinning, happens when you pin the UIScrollView to top, bottom, left and right.
This is the right way to cover the top margin.
1) Pin all the four sides.
2) Select the top constraint > Change Second Item to Superview.Top
3) Then the last step is to change the Constant to 0 (Zero).
You might want to check this too: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift
Upvotes: 2
Reputation: 476
Swift 3 (Auto Layout)
Upvotes: 0
Reputation: 445
Swift 3.0
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
scrollView.contentOffset = CGPoint(x: 0.0, y: 0.0);
Upvotes: 0
Reputation: 1716
1... Why is UIScrollView leaving space on top
With Storyboard- Goto view controller > Attribute Inspector > Uncheck Adjust Scroll View Insets property
With Code- For extra space set viewController
property automaticallyAdjustsScrollViewInsets
to NO
, by default it is YES
.
self.automaticallyAdjustsScrollViewInsets = false;
scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);
2... does not scroll to the bottom
To make it scroll try with large number in contentSize
like CGSizeMake(320, 1687)
. If it works that means you are not setting the contentSize
large enough to have all its content.
Upvotes: 52
Reputation: 335
Swift 3.0
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
Upvotes: 6
Reputation: 3906
Just select your view controller and set shown option to false (uncheck)
Upvotes: 34
Reputation: 1159
In your view .m file, use this code to fix this problem
-(void)layoutSubviews{
// To fix iOS8 bug of scrollView autolayout
if([[[[[UIDevice currentDevice]systemVersion] componentsSeparatedByString:@"."]objectAtIndex:0] integerValue] == 8){
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
}
Upvotes: 0