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:
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?
Jawaban:
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:
Atau, pilih batasan dari garis besar dokumen, buka inspektur ukuran, dan ubah di sana:
Sejauh peringatan di bagian atas tangkapan layar Anda:
Berikut ini adalah tangkapan layar dari aplikasi saya sendiri di mana saya mendapatkan peringatan yang sama persis:
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.
sumber
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.
sumber
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.
Jika Anda memiliki masalah dengan Tombol tanpa teks apa pun (hanya gambar), cobalah untuk menghapus "judul default" yang mungkin masih diatur untuk tombol:
sumber
UIButton
keStoryboard
,default button
judulnya adalahbutton
.Dengan
Labels
, Anda dapat mengaturLines
adalah0
danAutoshrink
properti adalahMinimum Font Size
untuk menghapusFixed Width Constraints May Cause Clipping
peringatan, seperti ini:sumber
Solusi cepat lain!
Untuk UIButton dengan mengubah judul dari teks biasa menjadi teks yang dikaitkan juga menyelesaikan masalah saya: -
sumber
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.
sumber
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" :
sumber
Jika Anda memerlukan batasan lebar tetap untuk tombol, tetapkan prioritas batasan lebar untuk
700
.sumber
Saya memiliki masalah yang sama, tetapi ketika saya mengubahnya
>=
secara otomatis mengatur konstanta0
, jika saya memilih60
misalnya, peringatan itu muncul lagi. Jadi saya berada dalam lingkaran masalah.Saya dapat memperbaiki penyematan
Label
di aView
Dalam
Label
I setTop
,Bottom
,Leading
danTrailing
denganconstant = 0
Di
View
aku aturconstraints
yang kuharapkan sebelumnya.sumber
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.]
sumber
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.
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.
sumber
Saya memiliki masalah serupa ketika mencoba memiliki tombol dengan bantalan yang sama dari tepi tampilan super.
Saya akhirnya menggunakan
horizontal center
kendala danequal widths
kendala untuksuper view
.sumber
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:
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
Tambahkan Kendala Memimpin atau Trailing
sumber