2014-03-24 31 views
1

我有一個觀點,即是在一個容器NSLayoutConstraint - 我想創建側邊

enter image description here

在一些視圖控制器我在這個容器的地方,我希望能有全球側邊

但我不知道如何將它們添加到容器。

我的意思是我不知道如何定義NSLayoutConstraint來做我想做的事。

我想從各個側面20pts,左和容器的右側的側邊,在關於它的父

回答

1

它看起來應該是這樣的:

// Get view and bind that 
UIView * view = childViewController.view; 
NSDictionary *views = NSDictionaryOfVariableBindings(view); // @"view" : view 
// add constraint to view with margins - -value- to supertview - | in horizontal axis 
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20.0-[view]-20.0-|" options:0 metrics:metrics views:views]]; 
// The same for vertical axis 
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20.0-[view]-20.0-|" options:0 metrics:metrics views:views]]; 

此外,看一看本教程:http://commandshift.co.uk/blog/2013/01/31/visual-format-language-for-autolayout/。看起來很好。

祝你好運!

+0

不幸的是,這也沒有工作,因爲我正在處理容器,我不清楚我應該在哪裏添加此代碼,以確保它不會落在childViewController.view沒有viewdidload上的超級視圖的事實 –

+0

爲什麼你需要'viewDidLoad'嗎?爲了向你展示子視圖控制器,你需要在某處添加'addSubview:'(或'insertSubview')'childViewController.view',這樣你就可以在'addSubview:' – Ossir

0

你可以用比官方API(其中視覺格式是最容易掌握的,但仍然不是非常直觀的IMHO)更直觀的代碼來解決這個問題。

如果你使用像https://github.com/jrturton/UIView-Autolayout第三方類(我建議你這樣做),這樣就解決了儘可能少的代碼,因爲這:

[yourView pinToSuperviewEdges:JRTViewPinLeftEdge|JRTViewPinRightEdge inset:20.0]; 

UPDATE

由於您的評論指出,右邊緣不起作用,您可以嘗試單獨設置邊緣約束來調試它,如下所示:

[yourView pinEdge:NSLayoutAttributeLeft toEdge:NSLayoutAttributeLeft ofView:yourSuperView inset:20]; 
[yourView pinEdge:NSLayoutAttributeRight toEdge:NSLayoutAttributeRight ofView:yourSuperView inset:40]; 

在第二個約束上更改插入以查看是否正確。如果它突然看起來正好是50的插值,那麼你知道超視圖太寬了(在這種情況下是30像素)。

+0

之後執行這些代碼。正確的邊緣,使視圖被切斷,我需要做些什麼來解決這個問題? –

+0

添加了單獨設置它們的示例,以便您可以嘗試使用右邊緣插入來調試什麼是「錯誤」。 – Moonwalkr

+0

結果沒有變化 –

相關問題