2012-12-01 30 views
4

如何修復屏幕上的子視圖位置(特別是在UIScrollView和UITableView中)?我認爲在故事板iOS:在屏幕上添加具有修復位置的子視圖

[self.view addSubview:aSubView]; 

不工作了。

任何想法?

編輯#1:我使用UITableViewController,而不是一個簡單的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]; 
+0

請充實你的問題有點....我不明白你想要做什麼。 –

+0

在ios 6中你可以在xib中使用約束 – samfisher

+0

我想修復一個子視圖(UIView)的位置,所以它不會與UITableView的內容一起滾動。子視圖應該保持固定在屏幕上.. – filou

回答

17

正如其他人指出的那樣,如果您不使用UITableViewController,這會更容易一些,但它並不難。

UITableViewUIScrollView的子類,所以表視圖的委託(在本例中爲您的UITableViewController實例)也將接收方法調用UIScrollViewDelegate。你所要做的就是實現每次滾動偏移改變時調用的方法,並調整你的「固定」視圖的框架。

事情是這樣的:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGRect fixedFrame = self.fixedView.frame; 
    fixedFrame.origin.y = 20 + scrollView.contentOffset.y; 
    self.fixedView.frame = fixedFrame; 
} 

通過你要多少分才能將其從表視圖的頂部更換20。您仍然添加self.fixedView作爲self.view的子視圖,這隻會確保它看起來像在表視圖上方的固定位置。


編輯:與你貼出來,我猜你的優化版本應該是這樣的代碼:

- (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; 
} 
+0

嘗試過這種方式,但它似乎不起作用(請查看上面我的問題中的代碼)。 – filou

+0

你把那些代碼放在哪裏?你不應該在這個方法中有其他4行,他們應該留在你的viewDidLoad或你曾經擁有過它們的地方。我發佈的方法可以工作,你只需要像我描述的那樣使用它。 –

+0

查看編輯我的答案,如果你這樣說,它會工作。 –

0

如果其含有表視圖,一個簡單的視圖控制器[self.view addSubview:aSubView]應該工作。但如果它是一個表視圖控制器,它不會工作。

+0

絕對正確。這是一個UITableViewController ..但我怎樣才能修復子視圖的位置呢? – filou

+0

你不能。使用一個簡單的UIViewController並添加一個UITableView作爲它的子視圖。然後按照常規方式綁定數據源,填充數據等。一旦完成,您可以使用[self.view addSubview:view] –

+0

可能會有解決方法可以在表視圖中獲取固定位置的項目。但這不可取。相反,修復視圖控制器是正確的方式。 –

1

可你只需要添加你的子視圖到窗口,如:

[self.view.window addSubview:mySubView]; 

它適合我。我在動態表格視圖中添加了一個pix位置信息視圖。

0

可以通過將UIScrollView的子視圖(你的)移動到scrollview的超級視圖來完成。

下面是一個簡單的示例:
將此按鈕放置在滾動視圖上(不在滾動視圖中),如此快照中所示。還可以針對您的滾動視圖的超級視圖設置按鈕約束(位置)。

enter image description here

這裏是裁判。每個視圖的位置層次結構的快照。

enter image description here

相關問題