Pertanyaan UIScrollView tidak menggunakan batasan autolayout


Saya memiliki tampilan gulir dan tampilan gambar di belakangnya dan saya mengisinya dengan nibs. Saya menggunakan autolayout. Saya memiliki ruang bawah untuk superview dan ruang atas untuk superview pada kedua pandangan. Tampilan gambar melakukan persis apa yang ingin saya lakukan. Untuk iphone 5 itu adalah tempat yang saya inginkan. Dan untuk iphones lainnya, tetap di atas bagian bawah layar, sehingga ukurannya diubah dengan benar. Tampilan gulir terlihat tepat di iphone 5, tetapi di ponsel lain tidak diubah ukurannya, jadi gulir ke bawah di bawah tampilan aplikasi. Saya mendapatkan pesan-pesan ini di log:

 2012-11-21 10:42:38.576 LCHApp[12604:907] 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:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cca10 h=-&- v=-&- ScheduleViewNib:0x1d853630.height == UIScrollView:0x1d8413b0.height - 386>",
"<NSLayoutConstraint:0x1d8e5340 V:[UIImageView:0x1d892110]-(64)-|   (Names: '|':ScheduleView:0x1d8efc30 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cf520 h=--& v=--& V:[ScheduleView:0x1d8efc30(480)]>",
"<NSLayoutConstraint:0x1d8eaed0 V:|-(45)-[UIScrollView:0x1d8413b0]   (Names: '|':ScheduleView:0x1d8efc30 )>"


 Will attempt to recover by breaking constraint 
 <NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom ==      UIImageView:0x1d892110.bottom>

Saya sudah mencoba

[self setTranslatesAutoresizingMaskIntoConstraints:YES];

dan

[self.myScrollView setTranslatesAutoresizingMaskIntoConstraints:YES];

Dari apa yang saya lihat, ini menghilangkan semua kendala dari pandangan. Dan bukan yang saya inginkan.


74
2017-11-21 18:11


asal


Jawaban:


Hubungan antara UIScrollView dan tata letak otomatis berbeda dari aspek tata letak otomatis lainnya. Pada dasarnya, jika tata letak otomatis sederhana diizinkan untuk beroperasi, tidak ada yang akan menggulir. Sebagai contoh, jika subview dari tampilan gulir yang disematkan dengan cara normal oleh kendala ke 10 poin dari bagian atas tampilan gulir, itu akan benar-benar disematkan di sana; itu tidak akan pernah bergerak, tidak peduli bagaimana tampilan gulir digulir.

Untuk mengatasi masalah ini, UIScrollView yang menggunakan autolayout beroperasi dengan cara yang benar-benar baru. Oleh karena itu ketika Anda mengatakan "Saya menggunakan autolayout" Anda harus mempersiapkan hal-hal untuk beroperasi sangat berbeda dari sebelumnya. Anda harus menggunakan satu tampilan gulir tampilan dengan translatesAutoresizingMaskIntoConstraints = YES, dan ukuran konten eksplisit, atau yang lain semuanya harus ada translatesAutoresizingMaskIntoConstraints = NO dan ukuran konten akan dideduksi secara implisit berdasarkan batasan subview.

Ini dijelaskan dengan sangat baik https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-6_0/index.html


169
2017-11-25 03:37



Sangat penting saat menggunakan tata-letak otomatis: Anda harus menyemat kanan dan / atau bawah sub-teks terakhir ke kanan dan / atau bawah tampilan pengguliran. Ini adalah bagaimana tampilan gulir tahu ukuran konten. Sebagai contoh:

[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:lastSubView
                                                 attribute:NSLayoutAttributeRight
                                                 relatedBy:NSLayoutRelationEqual
                                                    toItem:scrollView
                                                 attribute:NSLayoutAttributeRight
                                                multiplier:1.0
                                                  constant:0]];

Terima kasih saya untuk situs ini untuk memberikan contoh yang sempurna.

Saya kehilangan jam karena ini, dan saya berharap untuk menghindarkan orang lain rasa sakit saya.


159
2018-04-16 04:50



Untuk mendapatkan UIScrollviews agar bekerja dengan baik dengan kendala, saya menggunakan pendekatan ini yang dijawab sini. Dalam jawaban itu, saya membahas cara mendapatkan secara vertikal gulir kerja scrollview yang juga berfungsi dengan rotasi perangkat. Anda dapat menyesuaikan pendekatan untuk bekerja secara horizontal scrollview gulir juga. Untuk tampilan gulir yang bergulir di kedua arah, tidak tambahkan ukuran trik kendala lebar pencocokan. Tetapi melakukan hal lain yang sama.


0
2018-01-22 03:47



Beberapa hal.

  1. pastikan autolayout aktif (IB pada "File Inspector Tab")
  2. Pastikan Anda TIDAK membuat perubahan apa pun yang melibatkan batas, bingkai, dll. - ini semua dilakukan oleh Kendala otomatis sekarang
  3. Pastikan Anda menjauh dari AutoResizingMask. Ini akan bersaing dengan pengaturan baru Anda. Jika ini dilakukan dengan benar, Anda sekarang dapat menata tombol Anda dan itu akan bekerja dengan baik. Begini caranya.

Kesalahan ini menyatakan bahwa nib Anda atau kontrol dalam nib itu TIDAK menggunakan tata letak otomatis.


-3
2017-11-24 05:55