Rozszerzenie Moje Dzisiaj musi mieć dynamiczną wysokość w zależności od zawartości wyświetlanej widgetu. Udało mi się to osiągnąć, dodając ograniczenie do mojego najbardziej dolnego elementu: górna krawędź prowadnicy u dołu jest mniejsza lub równa dolnej części elementu, o stałej 0, priorytecie 999, mnożniku 1.Dzisiaj Wysokość rozszerzenia dla iPada znacznie większa niż podana
To działa dokładnie zgodnie z oczekiwaniami na iPhone'ach - wysokość widgetu pasuje do całej zawartości, a domyślny dolny margines jest stosowany przed wyświetleniem następnego widgetu.
Ale na iPadzie wygląda na to, że ustawiam wysokość widżetu równą maksymalnej wysokości. Centrum powiadomień pozwoli na wyświetlanie widżetu - pod moim widżetem jest dużo miejsca, prawie na pełnym ekranie.
Jak mogę usunąć dodatkowe miejsce?
Wiem dokładnie, na czym polega problem, ale nie jestem pewien, jak go rozwiązać - patrz sekcja "Problem". Pozwól mi najpierw wyjaśnić konfiguracji:
Setup:
ustawić widok tego rozszerzenia jest w storyboard, nic nie odbywa się programowo. Widok składa się z 5 elementów ułożonych pionowo, a inne poziomo. Są to ograniczenia układu auto do tej pionowej linii od góry do dołu - gdzie nie wskazano priorytetem jest 1000, mnożnik 1:
UILabel: height = 35, top space to top layout guide with constant of 10
UIButton: equal height and width to a different button (whose aspect ratio is 1:1, there is no fixed width/height), top space to label 10
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8, bottom space to bottom layout guide <= 0 with priority 999
niezbędną Zachowanie:
- muszę siatkę Przyciski 4x4 umieszczone pod pojedynczą etykietą o pełnej szerokości
- Każdy przycisk powinien mieć dokładnie taką samą szerokość i wysokość - wszystkie idealne kwadraty
- Brak dodatkowej przestrzeni pod ostatnią r ow przycisków
Rezultat:
oczekiwany wynik:
Problem:
Ograniczenia współczynnik proporcji wszystkich przycisków w efekcie pośrednio narzucają aspekt "niejawny" ograniczenie tio na wysokości widoku widżetu, gdy jest ono wysyłane systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:
, gdzie przekazuje ono niezbędną szerokość (724) dla układu o wymaganym priorytecie i wysokość 0 (aby skompresować widok) przy priorytecie poziomu dopasowania. Powoduje to, że na iPadzie widoczny jest wysoki widżet, w którym widok jest szerszy. Ale nie ma faktycznego ograniczenia proporcji, które można usunąć. Zasadniczo, ponieważ zastosowałem ograniczenia proporcji do wszystkich przycisków, wysokość dzisiejszego rozszerzenia zależy od jego szerokości (biorąc pod uwagę wszystkie ograniczenia łącznie, proporcje i inne). Tak więc wysokość rozszerzenia jest niezgrabna na szerokim obszarze, objawiając się na szerokim urządzeniu, takim jak iPad. Ograniczenia na przyciskach należy ponownie rozważyć lub w jakiś sposób dostosować.
przykładowy projekt:
sample project that demonstrates the issue jest dostępny od CloudApp więc można pobrać i grać z nim.
Co próbowałem:
Próbowałem usunięcie wypustki domyślny margines nadrzędnymi widgetMarginInsetsForProposedMarginInsets
i powrocie 0
na dole. Usunęło to domyślne wypełnienie, dlatego nieco zmniejszyło wysokość, ale pod nim jest jeszcze dużo dodatkowej przestrzeni.
UILabel
miał ograniczenia na to: etykieta wiodący równy wiodących Superview za - stała 0, priorytet 1000, mnożnik 1. Jeśli po prostu zmienić do Superview wiodących marginesu, dodatkowy dolny rozstaw magicznie znika. Zastanawiałem się, czy to dlatego, że elementy stały się zbyt duże, więc zwiększenie ilości lewego odstępu zmniejszyłoby ich rozmiar, ale starałem się utrzymywać go w stałym prowadzeniu i zwiększaniu stałej, a to nie rozwiązało problemu. Ale to rozwiązuje tylko problem dotyczący iPada w trybie portretu. I to nawet nie w pełni go rozwiązuje, za każdym razem, gdy niszczysz Centrum Notyfikacji, zaczyna się na dużej wysokości, a następnie kurczy się do odpowiedniego rozmiaru. W krajobrazie nigdy nie zmniejsza się do właściwego rozmiaru.
Próby rozwiązania:
- @Lefteris zaproponował hardcoding wielkości, która nie będzie działać w tym przypadku jak wysokość jest dynamiczna i widżet jest dostępny w wielu rozmiarach ekranu /orientacjach.
- @Yuyutsu próbował go rozwiązać, ale niestety nie spełnia wymagań i wykazuje sprzeczne ograniczenia i zmodyfikowany układ.
mam jakieś dziwne problemy dotyczące wysokość dzisiejszego rozszerzenia kilka dni temu, przeczytaj ten FYI: http://stackoverflow.com/questions/26087907/height-of-ios8-today-extension-using-only-auto-layout-gives-broken-constraints – liushuaikobe
try tworzenie widoku rozszerzenia jako podglądu innego niestandardowego kontrolera widoku, a następnie zastosowanie w nim metody viewDidLoad(), powinno działać –