I have a super-tall (220pt) section header on a table view that shows in app purchase information. When the user drags on the section header, the rows below scroll accordingly. It makes sense with a regular table view but in this case, the behaviour is weird.
Is there any way to prevent this happening? I've tried setting the view to exclusiveTouch = YES and even disabled userInteraction but the tableview insists on scrolling.
I tried overriding beganTouches etc but they still got passed to the table view, so in the end I abandoned using section header view and inserted the view above the table view. The view had a fixed 220pt height set in the storyboard and an NSLayoutConstraint as IBOutlet so its height could be set to 0 when the view was to be hidden.
Related
Im trying to implement a CollectionView inside my viewController.
And it works just fine.
The problem Im having is that the CollectionView scrolls inside the Parent controller.
I wish to make that if you scroll the collection view - the whole view is scrolled and not just the collection view bit.
I tried disabling scrolling on the Collection View but then nothing is scrolling anymore.
So how would I go about setting the collection view, so that once you scroll on it the whole page scrolls and not just the collection view scrolling inside the parent view controller?
It should be simple, and you've done one right thing already.
Disable scrolling of your collectionView (or tableView, in the future just in case you'll use it, they're basically the same).
Add your collectionView (or tableView) inside a scrollView.
That scrollView is of course in your controller's view.
Make sure every constraints are set properly.
You might need to get the size of your collectionView (say height), and set that height value to the constraint height of your collectionView.
These answers of mine in the past should help you:
https://stackoverflow.com/a/52657995/3231194
https://stackoverflow.com/a/54211275/3231194
https://stackoverflow.com/a/53971539/3231194
Voila. The only scrolling enabled is your scrollView that contains your collectionView (or tableView).
I have standard master-detail navigation based app with first VC as UITableView. I want almost standard UITableView with custom tableHeaderView (UISearchBar enhanced with additional button).
First I have tried to set UISearchBar as header view and everything works just fine.
But when I set a custom view (even simple empty UIView) as tableHeaderView, table begins to behave wrongly:
Header view scroll offset is not adjusted automatically (i.e. header not automatically slides up or down)
When push to another view controller happens, UITableView scrolls to Zero contentOffset, which is noticeable by user
This is strangle because UISearchBar being set as header should not affect tableView scroll logic.
Maybe apple uses some hidden APIs?
Anyway, is there a way to make custom header that works smoothly like with a SeacrBar (without side effects)?
Here is the problem that I'm facing. I have UITableView inside main view. When user taps menu button, view is added to the view hierarchy of superview, and this view covers all screen, except the menu button. That is I call
[self.view insertSubview:self._menuView belowSubview:self._menuButton]
After user clicks the menu button again I call
[self._menuView removeFromSuperview]
However, after this, the UITableView stops scrolling, actually it scrolls, but just a little, couple of pixels, and then bounces back to the location on which it was before I inserted _menuView. I've monitored the menu hierarchy after inserting and removing the _menuView, it is actually removed, and also there is no view which covers the UITableVIew, so there is no chance that some other view steals touches from UITableView. What can be the problem? Any ideas?
EDIT 1: I've noticed besides not being able to scroll, another strange thing happens. When I show menuView, the tableView is scrolled to top, without animation. (the menuView is half opaque only, so I can see the tableView underneath it)
EDIT 2: I've monitored contentSize and contentOffset of tableView before and after inserting _menuView, the reason for not being able to scroll is that somehow contentSize is being changed.
TABLE VIEW BEFORE INSERTING MENU - contentSize:{Width=320, Height=10519} contentOffset:{X=0, Y=3980}
TABLE VIEW AFTER INSERTING MENU - contentSize:{Width=320, Height=44} contentOffset:{X=0, Y=0}
As You can see, the height is changed to 44 that's why I'm not able to scroll. And Also, as I've said in EDIT 1: tableView is scrolled to top - so as you can see contentOffset is also zeroed. Any ideas why content size changes automatically?
Thanks in advance.
i think there is problem with your tableview frame. right after removing subview, try to set frame of your tableview at its original frame.may this will solve your problem
Content in the UITableView organized automaically and designed only to show cells & header/footer elements. To proper working you should wrap your table into parentView and add your menu to that parentView rather than to the UITableView. You can also try to call reloadData method on table since it can restore the content size of the view.
my view controller has a UITableView and my app is a chatting app where the table loads new chats. so i added a textfield that when pressed it goes over the keyboard so the user can see it. now when the textfield has been moved upwards and a new chat is available and the table view reloads, the textfield drops down to it's original place in which it was positioned and the keyboard is still in it's place as the textfield didn't resign it. How can i prevent the subviews of my view to reset to their original settings when i reload the table view?
Edit: the textfield isn't added to a cell. The view has a UITableView that i resized to keep space for the textfield in the bottom.
Unless you have done it already I suggest to have a regular view with a regular UIViewController as "host". Within that you have the textfiled and what ever else may be needed. And you have a container view where the Table View should reside. Within that container you nest your UITableView and its controler. By doing so reloading and other table manipulation tasks (like adding or deleting cells ect) cannot influence the layout of the hosting view.
If your app is a chatting app, I suppose you have your answering field at the end of your UITableView.
So just add a footer to it, containing your field.
Resizing the footer shouldn't mess up your all cells.
tableView.tableFooterView = ...
Then you don't need to resize your table since the field is part of it (it's in the scrollview of your tableview)
I have a rather large table header view above my table view. I have a number of subviews in that header view. I am doing something a bit nonstandard where I am "sticking" some of those subviews (but not all) at the top of the table view.
My problem is that although visually the table view cells pass under the sticky table header subviews, it seems that the table view cells are "above" the table header view in terms of touch response. (For example: I have a button that is a subview of the table header view. When there are no cells underneath the button, the button works great and responds to touches. However, when the user scrolls the table view so that there are cells underneath the button, a touch on the button actually selects a hidden cell rather than push the button.) Can anyone give advice on how to "raise" the table header view above the table view cells, so that its subviews get first shot at touch handling?
I am using a table header view rather than a section header view due to the fact that I only want some of the subviews to stick (letting the others scroll up off the screen as usual). One of the subviews also can be expanded (and that expansion is animated) - to a height that is even bigger than the entire height of the screen. For these reasons, I didn't think using a section header view would be feasible. (If it is, please let me know, as I know that section header views are "above" table cells when it comes to touch response.)
You may try this, which would keep the desired header view on top of the others.
[yourView bringSubviewToFront:yourSubView];
This may be able to help as well:
http://www.iphonedevsdk.com/forum/iphone-sdk-development/5222-keeping-subview-front.html
Is this what you were looking for or did you want another approach?