Saya mencoba menggambar beberapa gambar mini dengan ukuran tetap (100x100) menggunakan UIImageView
. Saya telah mengatur ukuran bingkai tampilan gambar saya menjadi 100x100, dan mengatur contentMode
ke UIViewContentModeScaleAspectFill
.
Pemahaman saya adalah bahwa ini harus menyebabkan gambar diambil pada ukuran yang saya set, dan gambar akan mengisi area gambar, dan klip bagian dari gambar yang berada di luar ukuran yang saya tetapkan untuk tampilan gambar. Namun, gambarnya masih tergambar lebih besar atau lebih kecil dari ukuran 100x100 yang saya tetapkan untuk itu.
Jika saya atur contentMode
ke UIviewContentModeScaleToFill
, maka gambar digambar tepat 100x100, tetapi terdistorsi agar sesuai dengan dimensi tersebut. Adakah ide mengapa isi aspek tidak terpotong seperti yang diharapkan?
Ini kode saya:
_photoView = [[UIImageView alloc] initWithImage:photoImage];
_photoView.contentMode = UIViewContentModeScaleAspectFill;
[self addSubview:_photoView];
CGRect photoFrame = _photoView.frame;
photoFrame.size = CGSizeMake(100, 100);
_photoView.frame = photoFrame;
Untuk ilustrasi yang lebih baik, berikut adalah screenshot dari apa yang saya lihat Kotak hijau adalah yang UIView
berisi yang UIImageView
saya kerjakan. Saya telah mengatur warna latar belakangnya menjadi hijau, dan bingkai tampilan menjadi 100x100. Sebagai tes, UIImageViews
ukurannya adalah 50x50. Seperti yang Anda lihat, saat menggunakan ...AspectFill
, gambar tidak berukuran 50x50, dan dalam beberapa kasus diimbangi dari tempat saya suka. Saat menggunakan ...ScaleToFill
, ukurannya benar, tetapi gambarnya terdistorsi.
sumber
Jika Anda ingin memperluas pengetahuan Anda, ada artikel yang sangat bagus tentang bagaimana tumpukan iOS UIView diberikan . Ada juga artikel yang lebih mendalam tentang keseluruhan pipa gambar .
Singkatnya:
Rasterisasi - Semua konten tampilan dirasterisasi (ditarik atau buffer piksel layar) dalam ruang koordinat batas Tampilan. Ini bisa berupa data gambar atau gambar kustom (yaitu
drawRect:
) tetapi konten subview. Rasterisasi ini memperhitungkancontentMode
properti.Apa pun di luar batas tampilan dihapus.
Komposisi - Hasilnya dikomposisikan (digambar di atas satu sama lain) dari subview ke superview. Ini menggunakan properti bingkai dari subview.
Jika
clipsToBounds
properti beradaYES
di superview maka ia akan membuang konten subview di luar batasnya.sumber
memiliki masalah yang sama dan diselesaikan dengan mencentang "Klip Subview".
Gambar ditampilkan dengan benar untuk semua tampilan (3,5,4,4,7,5,5, ipad) di pratinjau storyboard tetapi tidak di simulator.
Setelah saya mencentang "Klip Subview" masalah diselesaikan. :)
sumber
Memeriksa "Klip cuplikan layar" langsung di Storyboard / Xib juga berfungsi untuk saya.
sumber
Subview saya mengubah ukuran dan saya menyadari itu karena xib memiliki set tata letak otomatis:
sumber
Jika semuanya gagal,
lakukan klip untuk membatasi dalam Metode viewDidLayoutSubviews.
Contoh:
sumber