Otomatik yayınlama etkinleştirilmiş bir hikaye panosunda ortaya konan bir görünüm denetleyicim var ve görünümümün yatay olarak dönmesine ve ekrandaki düğmeleri yeniden düzenlemesine izin vermek için kısıtlamaları değiştirmenin bir yolunu arıyorum. Aşağıdaki kodu denediğimde, gerçekten deşifre edemediğim "kısıtları tatmin edemeyen, kısıtlamayan ..." iki düzine kadar aldım.UIStoryboard, kısıtlılıkları programlı olarak nasıl değiştirilir?
Programatik olarak belirttiğim kısıtlamaları olan bir hikaye tahtasındaki kısıtlamaları dinamik olarak değiştirmenin bir yolu var mı? Hikaye panosunda tanımladığım düğmelerin düzenini tamamen geçersiz kılmak istiyorum. Rob cevap Güncelleme
-(void)updateViewConstraints
{
[super updateViewConstraints];
self.loginButton.translatesAutoresizingMaskIntoConstraints = NO;
self.getStartedButton.translatesAutoresizingMaskIntoConstraints = NO;
self.takeTourButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.loginButton removeConstraints:self.loginButton.constraints];
[self.getStartedButton removeConstraints:self.getStartedButton.constraints];
[self.takeTourButton removeConstraints:self.takeTourButton.constraints];
one = self.loginButton;
two = self.getStartedButton;
three = self.takeTourButton;
NSDictionary *metrics = @{@"height":@50.0,@"width":@100.0,@"leftSpacing":@110.0};
NSDictionary *views = NSDictionaryOfVariableBindings(one,two,three);
[self.view removeConstraints:activeTestLabelConstraints];
[activeTestLabelConstraints removeAllObjects];
if(isRotatingToLandscape)
{
[self registerConstraintsWithVisualFormat:@"|-[one(two)]-[two(three)]-[three]-|" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"V:[one(height)]-|" options:0 metrics:metrics views:views];
}else
{
[self registerConstraintsWithVisualFormat:@"|-leftSpacing-[one(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"[two(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"[three(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"V:[one(height)]-[two(75)]-[three(100)]-|" options:NSLayoutFormatAlignAllCenterX metrics:metrics views:views];
}
}
, burada sadece bir görünümde tüm kısıtlamaları kaldırmak istediğiniz gibi geliyor ben
-(void)removeConstraintForView:(UIView*)viewToModify
{
UIView* temp = viewToModify;
[temp removeFromSuperview];
[self.view addSubview:temp];
}
Teşekkürler, işe yaradı! –
Alt görünümün süper görüntüden kaldırılmasının o alt görünüm için belirlenen kısıtlamalar için işe yaramadığını fark ettim (tutturulmuş yükseklik ve genişlik gibi) –
Yanıtın ikinci kısmı genişlik ve yükseklik kısıtlamalarını kaldıracaktır. –