Tek bir özel görünüme sahip bir görünüm denetleyicim var; Özel görünüm Çekirdek Grafikler kullanarak bir oyun tahtası çizer. (Başka hiçbir alt görüĢme söz konusu değildir.)Niçin süper görüşmeyle görüşmem moda olarak sunulduğunda (Otomatik Düzenleme kullanılarak) küçülüyor?
Oyun tahtasının süper görünümünü doldurması için Otomatik Düzen kısıtlamalarını ayarlıyorum. Görünüm denetleyicisini kök görüntüleme denetleyicisi olarak ayarladığımda, oyun tahtası (ve süper görüntü) ekranımı doldurur; Ancak, görüntü denetleyicisini moda olarak sunduğumda, oyun tahtası (ve süper görüntü) hiçbir şey/minimum değere küçülür ve Otomatik Düzen izlemesi yerleşimin belirsiz olduğunu bildirir.
Soruyu açıklamak için basitleştirilmiş bir test vakası yazdım.
İşte yeşil arka plan ile üst düzey bir görünümü olan benim BoardViewController
, ancak kırmızı bir arka plan ile tek bir geniş alt görünümü oluşturur. Bu görünüm denetleyicisi devraldığında ekranı tüm kırmızı görmek istiyorum:
- (void)loadView
{
UIView *mainView = [[UIView alloc] init];
mainView.translatesAutoresizingMaskIntoConstraints = NO;
mainView.backgroundColor = [UIColor greenColor];
UIView *subView = [[UIView alloc] init];
subView.translatesAutoresizingMaskIntoConstraints = NO;
subView.backgroundColor = [UIColor redColor];
[mainView addSubview:subView];
self.view = mainView;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(subView);
NSArray *c1 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[subView(>=10)]|"
options:0
metrics:nil
views:viewsDictionary];
NSArray *c2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subView(>=10)]|"
options:0
metrics:nil
views:viewsDictionary];
[self.view addConstraints:c1];
[self.view addConstraints:c2];
}
benim kök görünümü denetleyicisi olarak belirledi, sonra benim güzel kırmızı oyun tahtası ve ekranı kaplar bkz. Farklı Otomatik Düzen kuralları denemeye devam
- (void)loadView
{
UIView *rootView = [[UIView alloc] init];
rootView.translatesAutoresizingMaskIntoConstraints = NO;
UIButton *presentButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
presentButton.translatesAutoresizingMaskIntoConstraints = NO;
[presentButton setTitle:@"Present" forState:UIControlStateNormal];
[presentButton addTarget:self
action:@selector(present:)
forControlEvents:UIControlEventTouchUpInside];
[rootView addSubview:presentButton];
self.view = rootView;
[rootView addConstraint:[NSLayoutConstraint constraintWithItem:presentButton
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:rootView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0]];
[rootView addConstraint:[NSLayoutConstraint constraintWithItem:presentButton
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:rootView
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0.0]];
}
- (void)present:(id)sender
{
BoardViewController *bvc = [[BoardViewController alloc] init];
[self presentViewController:bvc animated:YES completion:NULL];
}
, ancak hiçbir yaparsam yapayım, ben oyunu alamayan: Farklı RootViewController
dan BoardViewController
sunmak Ancak, oyun tahtası asgari 10x10 kare küçülür Görünüm denetleyicisi, moda sunulduğunda ekranı doldurmak için. (Aynı zamanda bu soruyu soruyorum, çalışma zamanını belirsiz olduğunu düşündüğüm şeyleri anlatmaya çalışıyorum. Ama bu hata ayıklama henüz çok iyi değilim, bu yüzden benim sorum burada.)
Parlak! Teşekkür ederim! Bu yüzden, açıklama: En üst düzey görüşümün düzeni ile yanlış bir şekilde uğraştım, ki bu da beni bana sunan kimsenin konusudur. Bu durumda, presentViewController: animate: completion: '(varsayalım), yayları ve struts kullanarak görünümlerini ekler, ben de kırdım. Bunu açıklamanın adil bir yolu mu? –
Gördüğüm kadarıyla bir pencerenin rootViewController 'olmasının kısıtlamaları atlayan özel bir durum olduğu görünüyor.'MainView.translatesAutoresizingMaskIntoConstraints = NO;' içinde bırakırsanız ve el ile bazı kısıtlamalar eklemek için 'updateConstraints' öğesini uygularsanız ne olacağını deneyimlemek ilginç olacaktır ... –
[self.view translatesAutoresizingMaskIntoConstraints] değerinin dökümünü denedim viewDidAppear'da: hem modal sunumu hem de root-view-controller olarak ayarlanmıştır. Her iki durumda da YES'i terk etti. Belki de, bir görünüm denetleyicisi sunarken, kök görünümü denetleyicisi olarak bir görünümü açıkça kendi çerçevesini ayarlar. –