2015-09-15 12 views
5

Buna benzer tüm SO sorularını okudum ve kayboldum. Aşağıdaki hatayı alıyorum: Ben başarıyla çözdük diğer kısıtlamaları bir grup için bu ele verdikBu, hangi düzen kısıtlaması hakkında konuşuyor?

2015-09-14 22:59:40.455 guess-who[60143:9602686] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7c0f8e30 UIImageView:0x7b6efb60.top == _UILayoutGuide:0x7c0f67a0.top>", 
    "<_UILayoutSupportConstraint:0x7c0f8ae0 V:[_UILayoutGuide:0x7c0f67a0(0)]>", 
    "<_UILayoutSupportConstraint:0x7c0f0070 _UILayoutGuide:0x7c0f67a0.bottom == UIView:0x7c0f65e0.bottom>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7b6f6130 h=--& v=--& UIImageView:0x7b6efb60.midY == + 204>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7b6f6160 h=--& v=--& V:[UIImageView:0x7b6efb60(220)]>", 
    "<NSLayoutConstraint:0x7b6f6dc0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7c0f65e0(518)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7b6f6e20 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7c0f65e0] (Names: '|':UIView:0x7c0effc0)>" 
) 

Will attempt to recover by breaking constraint 
<_UILayoutSupportConstraint:0x7c0f0070 _UILayoutGuide:0x7c0f67a0.bottom == UIView:0x7c0f65e0.bottom> 

, ama bu beni stumping edilir. UILayoutSupportConstraint'un ne olduğunu bilmiyorum; belgeler çok kapsamlı değil. Görünüm hata ayıklayıcısını inceledim ve UIView:0x7c0f65e0 ana görünümüme bakmıyor gibi görünüyor (bazı nedenlerden dolayı boş bir görüntünün çocuğu olmasına rağmen). 0x7c0f67a0 ile hiçbir şey bulamıyorum, ancak LayoutGuide'ye başvurup diplerinin eşit olması gerektiğini belirten bir şey var. Bunu anlamak için başka hangi araçların kullanılabileceğinden emin değilim.

DÜZENLEME: Yapamam

enter image description here

:

Görünüm Debugger'ı kullanarak, ben kaynağını biliyorum ikisi de bu iki kısıtlamaları birine indirdim ettik Bunlardan hangisinin ayarlandığını bul. Herkesin ilk önerisinin translatesAutoresizingMaskIntoConstraints öğesini false olarak ayarladığını biliyorum, ancak bu benim tüm düzenimi yok ediyor ve nasıl düzelteceğimi bilmiyorum.

+0

Tüm projenizi görebilir miyim? Bu otomatik oynatma hakkında. –

+0

Özellikle ne göstermeliyim? – thumbtackthief

+0

Hikaye tablonuz. Github repo'ya bas, böylece çekme talebini gönderebilirim. –

cevap

-4

Aşağıdaki bu Satırı kullanın. Bu size yardımcı olabilir. yığılmış öğelerinden bazılarını hiçbir açık yükseklik/genişlik kümesi (PlayAgain, kedi, çerçeve) ve görüntü içeriğini kapalı dayanır çünkü

[view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
+0

Bunu denedim (iyi, Swift eşdeğeri) ve tamamen tüm düzenimi berbat ettim. – thumbtackthief

+2

Bu soruya cevap vermiyor, bir yorum olmalı. – JAL

+0

Artı, bu yardımcı olmaz ve Obj-C içinde. – thumbtackthief

2

devre dışı bırakılması translatesAutoresizingMaskIntoConstraints düzeninizi mahveder.

Örnek projeniz kutunun dışında çalıştırılamıyor, bu nedenle çalışma zamanı düzenini denetleyemiyorum. Ancak, bu elemanların yüksekliğini belirterek işe başlayacağım, böylece daha az otomatik kısıtlama var. Aynı zamanda, çalışma zamanındaki birçok kısıtlamayı değiştirdiğinize benziyor. Bu nedenle, birbirinizle çakışacak kısıtlamaları değiştirmek konusunda dikkatli olmanız gerekiyor. Kısıtlama sabitlemeye başlamadan önce düzenin mutlu olduğundan emin olun!

8

Ayrıca AL günlükleri daha okunaklı hale getirmek için görünümlere erişilebilirlik tanımlayıcıları ve kısıt tanımlayıcıları ekleme düşünebiliriz: InterfaceBuilder'da yılında

constraintVariableName.identifier = “constraintVariableName”;

, denetçisindeki tanımlayıcı özelliğini kullanın.

self.loginButton.accessibilityLabel = NSLocalizedString("LoginButtonAccessibilityLabel", @"");

Bu id Diyelim ki kimlikleri ile UIView, UIImageView ve UIConstraint gibi şeyler yerine yukarıda yayınlanan gibi günlükleri, içinde sona erecek.

3

Görüntünün görünümüne Superview ile ilgili kısıtlamalar verdiğiniz anlaşılıyor. Bu yüzden UILayoutGuide.bottom'un kısıtlamalarını tatmin etmek için sınırlarınız bozulur. 'un daha fazla ya da gereksiz kısıtlamaları gerekli değildir. kırık alıyorsanız

Kısıtlamalar şunlardır:

  1. UILayoutGuide.top = UIView.top
  2. UILayoutGuide.yükseklik = 0
  3. UILayoutGuide.bottom = UIView.bottom
  4. UIImageView yükseklik kısıtlaması
  5. UIImageView Y konumu
  6. UIView yükseklik kısıtlaması
  7. için verdik UIView üstten dikey aralık '0' dır ancak eksik alt/yükseklik kısıtlaması. yükseklik (220) ile UIImageView'ın için 750 için 1000 yükseklik kısıtlamalarına arasında öncelik değiştirerek

deneyin, yükseklik (518) ile UIView.

Ayrıca o zaman daha iyi bir fikir için Git üzerinde demo ekleyiniz mümkünse "<NSAutoresizingMaskLayoutConstraint:0x7b6f6e20 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7c0f65e0] (Names: '|':UIView:0x7c0effc0)>"

için alt sınırlamanın olmadığını kontrol etmek gerekir.

Yardım edin.

+0

Bu yararlıdır, ancak 3 ve 4'ün _where_ kısıtlamalarının atandığını veya bunların önceliklerini değiştirmek için nasıl bulunacağını göremiyorum. ViewController'ımda bazı kısıtlamalar ile çalışıyorum, ama ben ilgili hiçbir şey görmüyorum. (Ayrıca yine de yorumlandığında hata alıyorum) – thumbtackthief

+0

@thumbtackthief - Öncelikle görünümü seçmeniz gerekiyor. UIImageView Yüksekliğinin 4. sınırını düşünelim. Yapmanız gereken tek şey, UIImageView'ınızı seçmek ve xCode'un sağ tarafındaki Yardımcı Programlar paneline gitmek ve Boyut Denetçisini Göster'i seçmektir. Orada görüşünüze verdiğiniz kısıtlamayı bulacaksınız. Önceliğini değiştirmek istediğiniz kısıtlamaya iki kez hafifçe vurun. –

+1

@thumbtackthief - İkinci alt yerleşim kılavuzu için tüm alt düzen kılavuzlarını kontrol etmeniz gerekir. Düz Yatay Çizgi olacak ya da 2 kısıtlamayı daha önce seçtiğiniz Doküman Anahat panelinden seçebilirsiniz. Bir Kısıtlama seçin ve Boyut Müfettişinde sabit değer, Öncelik ve çarpanını görebilirsiniz. –