我有一個觀點,即是在一個容器NSLayoutConstraint - 我想創建側邊
在一些視圖控制器我在這個容器的地方,我希望能有全球側邊
但我不知道如何將它們添加到容器。
我的意思是我不知道如何定義NSLayoutConstraint來做我想做的事。
我想從各個側面20pts,左和容器的右側的側邊,在關於它的父
我有一個觀點,即是在一個容器NSLayoutConstraint - 我想創建側邊
在一些視圖控制器我在這個容器的地方,我希望能有全球側邊
但我不知道如何將它們添加到容器。
我的意思是我不知道如何定義NSLayoutConstraint來做我想做的事。
我想從各個側面20pts,左和容器的右側的側邊,在關於它的父
它看起來應該是這樣的:
// 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/。看起來很好。
祝你好運!
你可以用比官方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像素)。
之後執行這些代碼。正確的邊緣,使視圖被切斷,我需要做些什麼來解決這個問題? –
添加了單獨設置它們的示例,以便您可以嘗試使用右邊緣插入來調試什麼是「錯誤」。 – Moonwalkr
結果沒有變化 –
不幸的是,這也沒有工作,因爲我正在處理容器,我不清楚我應該在哪裏添加此代碼,以確保它不會落在childViewController.view沒有viewdidload上的超級視圖的事實 –
爲什麼你需要'viewDidLoad'嗎?爲了向你展示子視圖控制器,你需要在某處添加'addSubview:'(或'insertSubview')'childViewController.view',這樣你就可以在'addSubview:' – Ossir