Xcode 9 - “Sabit Genişlik Kısıtlamaları Kırpmaya Neden Olabilir” ve Diğer Yerelleştirme Uyarıları


148

Yeni Xcode'u indirdim ve Interface Builder'da aşağıdakiler gibi uyarılarla ilgili tonlarca sorun yaşıyorum:

Sabit Genişlik Kısıtlamaları Kırpmaya Neden Olabilir

Şöyle görünüyor:

resim açıklamasını buraya girin

Birkaç dil için yerelleştirmem var ve başka bir dilde bir etiketin boyutunun değişebileceği uyarısını anlıyorum, ancak uygulamamda bu sorun yok. Dün Xcode 8'de koştum ve test ettim, iyiydi. Anlamsız yeni kısıtlamalar ekleyerek saatler geçirmek istemiyorum.

Önerilen herhangi bir çözüm var mı?


Otomatik gözden geçirmeye bakmanızı öneririm
Dark Innocence

3
Burada aynı. Tüm dillerde 50pt genişliğinde olması garanti edilen düğmeler vardır. Aksi takdirde temiz autolayout rapor kartımı neden bu şekilde kullanıyorsunuz?
John Scalo

9
Bu kesinlikle büyük bir problem ve bunun hakkında daha fazla konuşma olmaması şaşırtıcı: O
Fattie

2
Bu hatayı sadece İngilizce yerelleştirme olsa bile alıyorum.
Shades

6
Diğerleri için, herhangi bir yerelleştirmeniz YOKSA ve bu uyarıların kaybolmasını istiyorsanız, film şeridinizi burada belirtildiği gibi Base.iproj klasörünün dışına taşıyın: stackoverflow.com/a/45040394/1807644
William T.

Yanıtlar:


179

Uygulamamda birden fazla dil olmasa bile aynı uyarıları alıyordum , bu da gerçekten neler olduğunu öğrenmemi sağladı. . .

Burada birkaç farklı şey oluyor. Nesne boşluklarının genişliğini sabit genişlikten daha büyük veya eşit veya daha küçük veya eşit olarak değiştirerek kendi uygulamamdaki sabit genişlik uyarılarını susturmayı başardım .

Bu, arayüz oluşturucudaki nesneyi seçerek, boyut denetçisine gidip orada değiştirerek yapılabilir:

resim açıklamasını buraya girin


Veya, belge ana hattından kısıtlamayı seçin, boyut denetçisine gidin ve orada değiştirin:

resim açıklamasını buraya girin



Ekran görüntünüzün üst kısmındaki uyarıya kadar:

Ortadaki bir kısıtlama içeren sabit ön ve arka sınırlamalar kırpmaya neden olabilir

İşte kendi uyarımdan tam olarak aynı uyarıyı aldığım bir ekran görüntüsü:

resim açıklamasını buraya girin

@ İşareti ile düğmelere liderlik ve takip için ayarlanmış, ancak aynı zamanda merkezi derecelendirme etiketi ile hizalamak için etiket vardı . Ben bir kez merkez hizalama kısıtlamasını kaldırıldı , uyarı kayboldu, ama nesnelerin bir yanlış ortaya koydu seti ile bırakıldı.

O zaman kendimi Stack View'u kucaklamak için istifa ettim . Kullanmak kadar sinir bozucu olduğu gibi, tüm kısıtlamaları ve ayarları doğru bir şekilde aldığınızda, güzel bir şekilde ve hiçbir uyarı olmadan ortaya çıkar.


Düzenle

As Repose yorumlarda yazıyor, bazen basitçe emin iki element örtüşme yoktur yapıyoruz gibi neye ihtiyacınız olacak> = 0 ekleyerek.


2
> = 0, daha önce sahip olduğum örtüşen ve örtüşen sorunları önler, Önde / İz'i Sağa / Sola dönüştürerek kırpma hatası benim için düzeltildi. Sonuçlar değişebilir. Herhangi bir yazılım geliştirmeye başlamadan önce lütfen doktorunuza danışın.
Repose

@ Tam olarak tekrar verin. Neyin yanlış gidebileceğini düşünün ve bunun olmadığından emin olmak için bir kısıtlama ekleyin.
Shades

İOS'ta Stack View kullanmak için istifa edilmiş olabilir, ancak OS X (üzgünüm MacOS) için her zaman iyi bir seçim değildir. Apple bilmeli. UI ve UX kavramının genellikle farklı varsayımları vardır.
Joannes

2
UIStackView'i kucaklamayı kabul ediyorum. Kesinlikle bir acı oldu ve birkaç kısıtlama ile yapmaya çalıştım, başka bir UIStackView ekledim ve mükemmel ortaya koydu.
templeman15

1
Başka bir seçenek var mı - Denetimimin sabit genişlik olmasını istersem ne olur?
Kampai

60

Uyarıyı susturmak ve yardımcı olup olmadığını görmek için "Dil Yönüne Saygı" yı Devre Dışı Bırakmayı deneyebilirsiniz. Kısıtlamanızı seçin ve Nitelikler / Boyut Denetçisi'ni açın. Lütfen ekteki resme bakın.

Uygulamanızı diğer dillere yerelleştirmeyi planlamıyorsanız, bu çözümün herhangi bir yedeği olmamalıdır. Yerelleştirilmiş uygulamalar için etiketinizin ve yazı tipi boyutlarınızın daha fazla farkında olmanız gerekir.

ps Bu çözüm iOS için çalışır. MacOS için uyarıyı susturmayı deneyin = = veya <=.

pps Aşağıdaki resimdeki etiketlerin, NSMutableAttributedString kullanılarak tek bir UILabel ya da UITextView üzerinde AutoLayout ve attributedString özelliği kullanılarak oluşturulması çok daha kolaydır. Görüntü yalnızca tanıtım amaçlıdır.

Dil Yönüne Saygısızlık Edin


1
Benim için "Merkez kısıtlaması olan önde gelen ve sondaki kısıtlamalar düzeltilmeye neden olabilir" sorunu düzeltildi. Teşekkürler!
toddg

4
Bunu denediyseniz ve bunun herhangi bir etkisi olmuyorsa, Xcode'dan çıkmayı ve yeniden başlatmayı deneyin. Bu numara benim için çalıştı.
T'Pol

2
Bunun seçimini kaldırmama izin vermiyor.
Scooter

1
Mükemmel! Bu benim için çalıştı ve kısıtlamalarımı değiştirmeye gerek yok, teşekkürler!
rgkobashi

1
> = çeşitli karmaşık öncelik şemaları nedeniyle kısıtlamaların benim için kötü etkileri oldu. Etiketimi bir Görünüme yerleştirmeye hazırlandım, ancak daha sonra hile yapan çözümünüzü buldum! Teşekkürler :)
KerCodex

33

Yerelleştirilmiş etiketler ve düğmeler için bu uyarı mantıklıdır ve etiketlerinizin çakışmaması için gerekli kısıtlamaları sağlamanız gerekir. Şimdi üst üste gelmezlerse, gelecekte olabilirler, bu yüzden kısıtlamaları sağlamak zarar vermez.

Xcode bu kısıtlamaları otomatik olarak eklemenize yardımcı olur:

Film şeridinizin belge anahattında sarı oku tıklayın ve metnin ekranınızın neresinde olduğuna (sol veya sağ) bağlı olarak "sabit satır başı" veya "sabit satır başı" seçeneğini seçin. Bu, çoğu sorun için düzeltir.

Xcode ekran görüntüsü

Metin içermeyen bir Düğme ile bu sorunu yaşıyorsanız (yalnızca resim), düğme için ayarlanmış olabilecek "varsayılan başlığı" kaldırmayı deneyin:

Xcode ekran görüntüsü


4
Benim durumumda, varsayılan başlığı kaldırmak uyarıyı kaldırdı. Teşekkürler!
Reinhard Männer

Bir eklediğinizde o dikkat edin UIButtoniçin Storyboard, default buttonbaşlık olacak button.
Miguel Tepale

29

İle Labels ayarlayabileceğiniz, Linesolduğu 0ve Autoshrinközellikleridir Minimum Font Sizekaldırmak için Fixed Width Constraints May Cause Clippingbu gibi uyarıları:

resim açıklamasını buraya girin


3
Evet, yalnızca 0 olarak ayarlanmış satırlara ihtiyacınız vardır.
Reefwing

2
0 satırındaki ayarlar, etiketin gerektiği kadar satır genişlemesine neden olur, bu da istediğiniz gibi olmayabilir.
nickdnk

@nickdnk: Etiket için yükseklik kısıtlamasını sabitlerseniz genişlemeyeceğini biliyorum.
Lionking

21

Başka bir hızlı çözüm!

Bir UIButton için başlığı düzden İlişkilendirilmiş metne değiştirerek de sorunumu çözdüm: -

resim açıklamasını buraya girin


Bir cazibe gibi çalıştı!
zanaat

7

Bu sorunun zaten yanıtlandığını biliyorum, ancak benim durumumda bu hatayı düzeltmek için yaptığım şey, "En-boy oranı" özelliğini eklemek ve daha sonra bu çok iyi çalıştı ve daha az çaba gerektiren genişlik veya yükseklik kısıtlamasını ortadan kaldırmaktı. aynı çıkış ve benim görüşümü farklı cihazlar için uyarlamak.


4

Swift 4, Xcode 9.1:

Bu sorun hakkında, nesnenizin denetimi bağlamında doğru merkez konumun ne olduğunu bilmediğini ve çoğu zaman kaldır, daha büyük veya diğer önde gelen / davranan ayarları kullanarak çoğu zaman doğru çalışmadığını düşünüyorum. İlk olarak, denetiminizin doğru kısıtlamalarını kontrol etmelisiniz.

Denetimleriniz doğru şekilde ayarlanmışsa, "Kapsayıcıda yatay" kısıtlamasını ayarlayarak nesnenize görünümde doğru konumun ne olduğunu "açıklamaya" çalışabilirsiniz :

resim açıklamasını buraya girin


2

Düğme için sabit genişlik kısıtlamasına ihtiyacınız varsa, genişlik kısıtlaması önceliğini ayarlayın 700.


1

Aynı sorunu yaşadım, ancak değiştirdiğimde >=sabiti otomatik olarak ayarlıyorum, örneğin 0seçersem 60uyarı tekrar görünür. Bu yüzden sorunla ilgili bir döngüdeydim.

Ben gömme düzeltmek olabilir LabelbirView

Editor > Embed In > View

In LabelSette Top, Bottom, Leadingve Trailingileconstant = 0

kısıtlamaları

Önceden beklediğim Viewşeyi ayarladım constraints.


1

Xcode 9'a geçerken aynı sorunu yaşadım ve belirli düzenler için yararlı bir yaklaşım buldum. Benim durumumda, iki sütunun (UILabel) sabit genişlikte ve diğerinin değişken genişlikte olduğu bir tablo başlığı istedim. Sütun genişliklerini nasıl belirlediğime bakılmaksızın (eşit yerine daha büyük veya eşit kısıtlamaları kullanmak dahil), olası kırpma hakkında uyarı almaya devam ettim. Benim durumumda, gerekirse değişken genişlik sütun (UILabel) kırpmak istedim. Uyarıyı görmezden gelebilirdim, ama bunu yapmaktan hoşlanmıyorum.

Burada çalışan yaklaşım, uygun boyut kısıtlamalarına sahip bir UIView oluşturmak ve UILabel'i UIView'a bir alt görünüm olarak gömmekti. Sonra gerekirse kesilme olur ve uyarı almıyorum. Bu, UIView / katıştırılmış UILabel öğesinin StackView içinde olup olmadığına bakar.

Bu, Haroldo Gondim ile aynı yaklaşımdır, ancak burada StackView ile veya StackView olmadan da çalıştığını görebilirsiniz.

Aşağıdaki görüntü StackView ile ve StackView olmadan yaklaşımı göstermektedir. "SpacerName", etiket içeren değişken genişlikli UIView ve "SpacerPD" 80 sabit genişliğe sahip bir UIView'dir. [Renkler anlamlı değildir; görünümlerin nerede olduğunu göstermek için orada.]

resim açıklamasını buraya girin


0

Aşağıdaki resimde görebileceğiniz gibi, "Sabit Genişlik Kısıtlamaları Kırpmaya Neden Olabilir" hatasını alıyordum çünkü metin kutumu dikey olarak ortalayacak şekilde ve etiketimin sol kenar boşluğu kısıtlamasına sahip olmasına rağmen bir kısıtlama tanımlamamıştım etiketiyle ilgili metin kutusu için, XCode bana metin kutusunun etiketi kırpabileceği (yukarıda oluşturulabileceği) konusunda beni uyarıyordu.

resim açıklamasını buraya girin

Her zaman etiketten biraz uzakta kalmak için metin kutusuna sol kısıtlamayı ekledikten sonra, hata XCode tarafından çözülmüş olarak kabul edildi ve artık kısıtlama uyarısıyla beni rahatsız etmedi.


0

Süper görünüm kenarlarından aynı dolguları ile düğme var çalışırken benzer bir sorun vardı.

Hata durumu

Ben kullanarak sona erdi ettik horizontal centerkısıtlamayı ve equal widthskarşı kısıtlamayı super view.

Çözümüm


-1

Hatayı Düzeltmek için : Sabit Genişlik Kısıtlamaları Kırpmaya Neden Olabilir ”ve Diğer Yerelleştirme Görünümü / nesneyi seçmeniz," Boyut Denetçisini Göster "e gitmeniz, Genişlik Kısıtlamasını bulmanız ve Sabit'i Daha Büyük veya Eşit olarak ayarlamanız gerekir:

Boyut Müfettişi

Hatayı Düzeltmek için : Diğer görünümlerle çakışmaya neden olabilecek Önde Gelen / İzleyen kısıtlama eksik

Bu, Xcode'un şikayet ettiği görünümün / nesnenin, komşu bir görünüm için Önde Gelen veya Sonunda Bir Kısıtlama eksik olduğu anlamına gelir.

Denetimi basılı tutarken, görünüme / nesneye göre yakınına sürükleyin

Contrl + PressClick

Öncü veya Sondaki Bir Kısıtlama Ekleme

Baştaki / Sondaki Kısıtlama


Uyarı üçgeni tıklarsanız, Xcode bunları sizin için otomatik olarak tek bir tıklama ile oluşturur.
lensovet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.