How do I fix a subviews position on screen (especially in UIScrollView and UITableView)? I think in storyboard
[self.view addSubview:aSubView];
does not work anymore.
Any ideas?
EDIT #1: I am using a UITableViewController, not a simple UITableView.
EDIT #2:
CGRect fixedFrame = self.menuViewRelative.frame;
fixedFrame.origin.y = 0 + scrollView.contentOffset.y;
self.menuViewRelative.frame = fixedFrame;
menuViewRelative = [[UIView alloc] init];
menuViewRelative.backgroundColor = [UIColor grayColor];
menuViewRelative.frame = CGRectMake(0.0, 0.0, 320.0, 50.0);
[self.view addSubview:self.menuViewRelative];
As others noted, this would be a bit easier if you didn't use a UITableViewController
, but it's not that hard anyway.
UITableView
is a subclass of UIScrollView
, so table view's delegate (your UITableViewController
instance in this case) will also receive UIScrollViewDelegate
method calls. All you have to do is implement the method that gets called every time scroll offset changes and adjust the frame of your "fixed" view.
Something like this:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect fixedFrame = self.fixedView.frame;
fixedFrame.origin.y = 20 + scrollView.contentOffset.y;
self.fixedView.frame = fixedFrame;
}
Replace 20 by how many points you want it to be from top of the table view. You still add self.fixedView
as a subliew of self.view
, this will just make sure it looks like it's in a fixed position above table view.
Edit: with the code you posted, I'm guessing your verion should look like this:
- (void)viewDidLoad {
menuViewRelative = [[UIView alloc] init];
menuViewRelative.backgroundColor = [UIColor grayColor];
menuViewRelative.frame = CGRectMake(0.0, 0.0, 320.0, 50.0);
[self.view addSubview:self.menuViewRelative];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
CGRect fixedFrame = self.menuViewRelative.frame;
fixedFrame.origin.y = 0 + scrollView.contentOffset.y;
self.menuViewRelative.frame = fixedFrame;
}
Can you just add your subview into the window, like:
[self.view.window addSubview:mySubView];
It works for me. I added a pix position info view in a dynamic table view.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With