W kilku miejscach w mojej aplikacji otrzymuję zerowe rozmiary ramek, w których otrzymałem ramkę. Wpłynęło to na mnie szczególnie podczas tworzenia okrągłych obiektów poprzez róg o wartości size/2
.Xcode 8 ustawia inaczej rozmiar ramki. Jak znaleźć więcej informacji?
Na przykład w Xcode 7 to działało w porządku:
class AvatarUIButton: UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
layer.masksToBounds = true
layer.cornerRadius = bounds.size.width/2
}
}
Ale teraz w Xcode 8 muszę to zrobić:
class AvatarUIButton: UIButton {
override var bounds: CGRect { didSet {
layer.cornerRadius = bounds.size.width/2
}}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.masksToBounds = true
}
}
W tym przykładzie, zmiana jest zapewne lepiej/bardziej oczywisty. Mam inną sytuację, która jest znacznie mniej izolowana, obejmującą ramkę 0 w TableHeaderView, która jest tylko dla kodu xcode 8.
Szukam informacji o wydaniu, dyskusji na liście dyskusyjnej lub podobnej, która omawia zmianę kolejności określania rozmiaru klatki więc mogę dowiedzieć się, co się zmieniło i jak mogę to naprawić.
mam ten sam problem. To jest problem z AutoLayout. W moim przypadku ramki rejestrują się jako (0, 0, 1000, 1000). Ustawienie promienia narożnika na stałą wartość (niezliczone) powoduje ponowne pojawienie się widoku. Bez użycia AutoLayout problem nie istnieje. – Tuslareb
Miałem podobny problem, z podziałem w niestandardowej komórce tabeli. Wywiad miał ograniczenia dotyczące pozycji i rozmiaru. _Przedtem komórka została wyświetlona ramka dla tego wydziału to {(0,0), (1000,1000)}. Niestandardowy rysunek oparty na tej ramce najwyraźniej nie działał. Podczas debugowania i przeglądania widoków znalazłem, że ramka jest poprawna dopiero po wyświetleniu widoku na ekranie. Moim rozwiązaniem było dodanie '[cell layoutIfNeeded]' zaraz po odjęciu komórki z 'cellForRowAtIndexPath:'. Rozwiązał problem dla mnie i mogłem dalej obliczyć promień narożnika w innym miejscu. –
Nauka: tak, klatki mają teraz rozmiar 1000 lub zero w widoku 'viewWillAppear' (w zależności od tego, jaki masz xcode beta). Ale w 'viewWillAppear' możesz wywołać' view.layoutIfNeeded() ', aby poprawnie dopasować ramki. – SimplGy