I am making a normal view where users can update their profiles. I followed these steps to make that view
- Created a new
UIViewController
Overriding UIScrollView touchesShouldCancelInContentView
method will solve this problem.
According to Apple touchesShouldCancelInContentView is called before scrolling begins if touches have already been delivered to a subview of the scroll view. if it returns NO the touches will continue to be delivered to the subview and scrolling will not occur.
By default this method returns NO if view is a UIControl
. So the scroll doesn't happens for the UIControls.
If we returns YES from this method the touches will not be delivered to subview, So the scroll will occurs.
So override UIScrollView touchesShouldCancelInContentView
like following
@interface MyScrollView : UIScrollView
@end
@implementation MyScrollView
- (BOOL)touchesShouldCancelInContentView:(UIView *)view{
return YES;
}
@end
NOTE: touchesShouldCancelInContentView
method only calls if we set the canCancelContentTouches
property to YES
Hope this helps.
You need to add an extra parent View for all the textfield in ScrollView.
Note:
Give constraints to UIView w.r.t. UIScrollView as Leading, Trailing, Top, Bottom and Equal Widths.
Also don't forget to add the bottom constraint for last object in UIView w.r.t. UIView (Customize it to approx. 30 since it will not scroll much after finishing the contents).
Customize the constraint of UIView bottom w.r.t UIScrollView to 0.
See:
You should use uiview as a superview on uiscrollView ,put all the textfield on uiview and make sure you have all the satisfactory constraints applied on uiview as respect of uiscrollView.
Set delayContentTouchesProperty to YES for UIScrollView. This would let you scroll if you touch contents of UIScrollView. You can do it either programmatically or from storyboard.