Xcode 9 - “Kendala Lebar Tetap Dapat Menyebabkan Kliping” dan Peringatan Pelokalan Lainnya

147

Saya mengunduh Xcode baru dan di Interface Builder saya mengalami banyak masalah dengan peringatan yang mengatakan hal-hal seperti:

Kendala Lebar Tetap Dapat Menyebabkan Kliping

Ini terlihat seperti ini:

masukkan deskripsi gambar di sini

Saya memiliki pelokalan untuk beberapa bahasa dan saya memahami peringatan bahwa dalam bahasa lain ukuran label mungkin berubah, tetapi aplikasi saya tidak memiliki masalah ini. Saya berlari dan mengujinya di Xcode 8 kemarin, itu baik-baik saja. Saya tidak ingin menghabiskan waktu berjam-jam menambahkan kendala baru yang tidak berguna.

Ada solusi yang disarankan?

Dave G
sumber
Saya sarankan Anda untuk melihat autoresizing
Dark Innocence
3
Sama disini. Ada tombol yang dijamin memiliki lebar 50pt dalam semua bahasa. Mengapa mengotori kartu laporan autolayout saya yang dinyatakan bersih dengan ini?
John Scalo
9
Ini jelas merupakan masalah besar, dan mengejutkan tidak ada lagi yang membicarakannya: O
Fattie
2
Saya mendapatkan kesalahan ini bahkan hanya memiliki lokalisasi bahasa Inggris.
Shades
6
Bagi yang lain, jika Anda TIDAK memiliki pelokalan dan hanya ingin peringatan ini menghilang maka pindahkan storyboard Anda keluar dari folder Base.iproj seperti yang ditunjukkan di sini: stackoverflow.com/a/45040394/1807644
William T.

Jawaban:

179

Saya mendapatkan peringatan yang sama bahkan tanpa banyak bahasa di aplikasi saya , yang membuat saya mencari tahu apa yang sebenarnya terjadi. . .

Ada beberapa hal berbeda yang terjadi di sini. Saya dapat membungkam peringatan lebar-tetap di aplikasi saya sendiri dengan mengubah lebar jarak objek dari lebar tetap menjadi lebih dari atau sama atau kurang dari atau sama .

Ini dapat dilakukan dengan memilih objek dalam pembangun antarmuka, pergi ke inspektur ukuran dan mengubahnya di sana:

masukkan deskripsi gambar di sini


Atau, pilih batasan dari garis besar dokumen, buka inspektur ukuran, dan ubah di sana:

masukkan deskripsi gambar di sini



Sejauh peringatan di bagian atas tangkapan layar Anda:

Memperbaiki batasan awal dan akhir dengan batasan tengah dapat menyebabkan kliping

Berikut ini adalah tangkapan layar dari aplikasi saya sendiri di mana saya mendapatkan peringatan yang sama persis:

masukkan deskripsi gambar di sini

Saya memiliki label dengan tanda @ yang diatur untuk memimpin dan mengekor ke tombol tetapi juga untuk menyelaraskan pusat dengan label peringkat . Setelah saya menghapus batasan pelurusan tengah , peringatan itu hilang, tetapi saya ditinggalkan dengan seperangkat objek yang tidak benar.

Saat itulah saya pasrah untuk memeluk Stack View . Menjengkelkan seperti yang digunakan, ketika Anda mendapatkan semua kendala dan pengaturan dengan benar, itu menjabarkan dengan indah dan tanpa peringatan.


Edit

Seperti yang ditulis Repose di komentar, terkadang hanya menambahkan> = 0 akan menjadi apa yang Anda butuhkan, karena Anda memastikan dua elemen tidak tumpang tindih.

Nuansa
sumber
2
> = 0 mencegah masalah tumpang tindih dan memperbaiki tumpang tindih yang saya alami sebelumnya, mengonversi Leading / Trailing ke Kanan / Kiri memperbaiki kesalahan kliping untuk saya. Hasil dapat bervariasi. Silakan berkonsultasi dengan dokter Anda sebelum memulai pengembangan perangkat lunak apa pun.
Beristirahatlah
@Repose Tepat. Pikirkan apa yang salah dan tambahkan kendala untuk memastikan itu tidak terjadi.
Shades
Mengundurkan diri untuk menggunakan Stack View di iOS mungkin baik-baik saja, tetapi untuk OS X (maaf MacOS) itu tidak selalu merupakan pilihan yang baik. Apple harus mengetahuinya. Konsep UI dan UX seringkali memiliki asumsi yang berbeda.
Joannes
2
Saya setuju dengan merangkul UIStackView. Sudah pasti menyebalkan dan saya mencoba melakukannya dengan beberapa kendala, saya menambahkan UIStackView lain dan ditata dengan sempurna.
templeman15
1
Apakah ada opsi lain - Bagaimana jika saya ingin kontrol saya tetap lebar?
Kampai
60

Anda dapat mencoba Menonaktifkan "Menghormati Arah Bahasa" pada setiap kendala untuk membungkam peringatan dan melihat apakah itu membantu. Pilih kendala Anda dan buka Attributes / Size Inspector. Silakan lihat gambar terlampir.

Jika Anda tidak berencana melokalisasi aplikasi Anda ke bahasa lain, maka solusi ini seharusnya tidak memiliki cadangan. Untuk aplikasi yang dilokalkan Anda harus lebih sadar akan ukuran label dan font Anda.

ps Solusi ini berfungsi untuk iOS. Untuk macOS coba> = atau <= untuk membungkam peringatan.

pps Label pada gambar di bawah ini jauh lebih mudah dibuat menggunakan AutoLayout dan properti attributedString pada UILabel tunggal atau UITextView menggunakan NSMutableAttributedString. Gambar hanya untuk tujuan demonstrasi.

Tidak Menghargai Arah Bahasa

Istirahat
sumber
1
Memperbaiki "Memperbaiki batasan awal dan akhir dengan batasan pusat dapat menyebabkan masalah kliping" bagi saya. Terima kasih!
toddg
4
Jika Anda sudah mencoba ini dan sepertinya tidak berpengaruh, cobalah berhenti Xcode dan mulai kembali. Trik itu berhasil untukku.
T'Pol
2
Itu tidak akan membiarkan saya membatalkan pilihan ini.
Scooter
1
Sempurna! ini bekerja untuk saya dan tidak perlu mengubah kendala saya, terima kasih!
rgkobashi
1
> = kendala berpengaruh buruk bagi saya karena berbagai skema prioritas yang kompleks. Saya siap memasukkan Label ke dalam Tampilan, tetapi kemudian menemukan solusi Anda yang berhasil! Terima kasih :)
KerCodex
33

Untuk label dan tombol yang dilokalkan, peringatan ini masuk akal dan Anda harus memberikan batasan yang diperlukan agar label Anda tidak tumpang tindih. Jika mereka tidak tumpang tindih sekarang, mereka mungkin di masa depan, jadi tidak ada salahnya untuk memberikan kendala.

Xcode membantu Anda menambahkan batasan ini secara otomatis:

Dalam garis besar dokumen storyboard Anda klik pada panah kuning dan pilih "pemimpin tetap" atau "jejak tetap", tergantung di mana teks berada di layar Anda (kiri atau kanan). Ini akan memperbaikinya untuk sebagian besar masalah.

Tangkapan layar Xcode

Jika Anda memiliki masalah dengan Tombol tanpa teks apa pun (hanya gambar), cobalah untuk menghapus "judul default" yang mungkin masih diatur untuk tombol:

Tangkapan layar Xcode

Pascal
sumber
4
Dalam kasus saya, menghapus judul default menghapus peringatan. Terima kasih!
Reinhard Männer
Perhatikan bahwa ketika Anda menambahkan UIButtonke Storyboard, default buttonjudulnya adalah button.
Miguel Tepale
29

Dengan Labels, Anda dapat mengatur Linesadalah 0dan Autoshrinkproperti adalah Minimum Font Sizeuntuk menghapus Fixed Width Constraints May Cause Clippingperingatan, seperti ini:

masukkan deskripsi gambar di sini

Raja singa
sumber
3
Ya, Anda hanya perlu mengatur garis ke 0.
Reefwing
2
Baris pengaturan ke 0 menyebabkan label melebar ke sebanyak garis yang diperlukan, yang mungkin bukan yang Anda inginkan.
nickdnk
@nickdnk: saya tahu bahwa, jika Anda memperbaiki batasan ketinggian untuk label, itu tidak akan berkembang.
Lionking
20

Solusi cepat lain!

Untuk UIButton dengan mengubah judul dari teks biasa menjadi teks yang dikaitkan juga menyelesaikan masalah saya: -

masukkan deskripsi gambar di sini

tryKuldeepTanwar
sumber
Bekerja seperti pesona!
kerajinan
7

Saya tahu pertanyaan ini telah dijawab tetapi apa yang saya lakukan untuk memperbaiki kesalahan ini dalam kasus saya adalah menambahkan properti "Rasio aspek" dan kemudian menghilangkan batasan lebar atau tinggi ini berfungsi dengan baik dan kurang usaha, dan saya berhasil menjaga output yang sama dan menyesuaikan pandangan saya untuk perangkat yang berbeda.

reojased
sumber
4

Swift 4, Xcode 9.1:

Tentang masalah ini, saya pikir objek Anda tidak tahu apa itu posisi pusat yang benar dalam konteks superview itu , dan menggunakan hapus, lebih besar dari atau pengaturan terkemuka / trealing lainnya seringkali tidak berfungsi dengan benar. Pertama, Anda harus memeriksa batasan superview yang benar.

Jika superview Anda ditetapkan dengan benar, Anda dapat mencoba untuk "menjelaskan" ke objek Anda apa posisi yang benar dalam tampilan dengan menetapkan batasan "horizontal dalam wadah" :

masukkan deskripsi gambar di sini

Alessandro Ornano
sumber
2

Jika Anda memerlukan batasan lebar tetap untuk tombol, tetapkan prioritas batasan lebar untuk 700.

ChikabuZ
sumber
1

Saya memiliki masalah yang sama, tetapi ketika saya mengubahnya >=secara otomatis mengatur konstanta 0, jika saya memilih 60misalnya, peringatan itu muncul lagi. Jadi saya berada dalam lingkaran masalah.

Saya dapat memperbaiki penyematan Labeldi aView

Editor > Embed In > View

Dalam LabelI set Top, Bottom, Leadingdan Trailingdenganconstant = 0

kendala

Di Viewaku atur constraintsyang kuharapkan sebelumnya.

Haroldo Gondim
sumber
1

Saya memiliki masalah yang sama ketika pindah ke Xcode 9 dan menemukan pendekatan yang berguna untuk jenis tata letak tertentu. Dalam kasus saya, saya ingin header tabel di mana dua kolom (UILabel) memiliki lebar tetap dan yang lainnya lebar variabel. Terlepas dari bagaimana saya menentukan lebar kolom (termasuk menggunakan kendala lebih besar atau sama dengan bukannya sama, dll.), Saya terus mendapatkan peringatan tentang kemungkinan kliping. Dalam kasus saya, saya ingin kolom lebar variabel (UILabel) untuk klip jika perlu. Saya bisa saja mengabaikan peringatan itu, tetapi tidak suka melakukan itu.

Pendekatan yang bekerja di sini adalah membuat UIView dengan batasan ukuran yang sesuai dan menanamkan UILabel sebagai subview dalam UIView. Kemudian pemotongan terjadi jika perlu dan saya tidak mendapat peringatan. Ini berfungsi baik pada UIView / embedded UILabel dalam StackView atau tidak.

Ini pada dasarnya pendekatan yang sama dengan Haroldo Gondim, tetapi di sini Anda dapat melihatnya juga bekerja dengan atau tanpa StackView.

Gambar berikut menunjukkan pendekatan, dengan dan tanpa StackView. "SpacerName" adalah lebar variabel UIView yang berisi label dan "SpacerPD" adalah satu dengan lebar tetap 80. [Warna tidak signifikan; hanya di sana untuk menunjukkan di mana pandangan.]

masukkan deskripsi gambar di sini

Tom Linton
sumber
0

Seperti yang dapat Anda lihat pada gambar di bawah ini, saya mengalami kesalahan "Memperbaiki Lebar Kendala yang Dapat Menyebabkan Kliping" karena walaupun saya telah mengatur kotak teks saya untuk dipusatkan secara vertikal dan label saya memiliki batasan margin kiri, saya belum menetapkan batasan untuk kotak teks dalam kaitannya dengan label, jadi XCode memperingatkan saya bahwa kotak teks dapat klip (diberikan di atas) label.

masukkan deskripsi gambar di sini

Setelah menambahkan kendala kiri ke kotak teks untuk selalu berada agak jauh dari label kesalahan dianggap diselesaikan oleh XCode dan itu tidak mengganggu saya dengan peringatan kendala lagi.

Ulysses Alves
sumber
0

Saya memiliki masalah serupa ketika mencoba memiliki tombol dengan bantalan yang sama dari tepi tampilan super.

Kasus kesalahan

Saya akhirnya menggunakan horizontal centerkendala dan equal widthskendala untuk super view.

Solusi saya

Pei
sumber
-1

Untuk Memperbaiki Kesalahan : Memperbaiki Batas Lebar Dapat Menyebabkan Kliping ”dan Pelokalan Lainnya Anda perlu memilih tampilan / objek, pergi ke" Tampilkan Ukuran Inspektur ", cari Kendala Lebar dan atur Konstan ke Lebih Besar atau Sama dengan:

Inspektur ukuran

Untuk Memperbaiki Kesalahan : Kendala pengarsipan / Trailing tidak ada yang dapat menyebabkan tumpang tindih dengan tampilan lain

Ini berarti bahwa pandangan / objek Xcode mengeluhkan, kehilangan Leading atau Trailing Constraint ke tampilan tetangga.

Saat memegang kontrol, seret ke dekat dengan objek / tampilan

Contrl + TekanKlik

Tambahkan Kendala Memimpin atau Trailing

Kendala Memimpin / Trailing

Manny
sumber
Jika Anda mengklik segitiga peringatan, Xcode akan secara otomatis membuat ini untuk Anda dengan satu klik.
lensovet