Osadzanie ImageView w widoku przewijania z automatycznym układem na iOS 6
Próbuję zrobić bardzo prosty element z nowym iOS 6 SDK z automatycznym układem. Mam ImageView i osadzam go w widoku przewijania. (wszystko budować z Interface Builder). The .plik png jest ustawiony, a tryb imageView jest ustawiony na "lewy górny róg".
Realizacja:
#import "ImaginariumViewController.h"
@interface ImaginariumViewController ()
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ImaginariumViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.scrollView.contentSize = self.imageView.image.size;
self.imageView.frame =
CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height);
}
@end
Po uruchomieniu aplikacji obraz nie jest przewijany. Robiąc to samo z wyłączonym układem automatycznym( z rozpórkami i sprężynami), mam działające przewijanie. Chyba problem tkwi w ograniczeniach. Czy ktoś mógłby mi pomóc, proszę?
2 answers
Właśnie natknąłem się na ten sam problem w samouczku, który aktualizowałem. Próbowałem programowo usuwać ograniczenia, przeklinać i walić głową w ścianę-bez powodzenia.
Około 5 minut temu próbowałem jednak czegoś, co naprawiło inny problem, który napotkałem, i, TA da! UIScrollView znowu działa! Rozwiązaniem było przeniesienie starego kodu, który ustawia właściwość uiscrollview contentSize do implementacji viewDidAppear, a nie viewDidLoad:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.theScroller.contentSize=CGSizeMake(200.0,2000.0);
}
Mam nadzieję, że to pomoże komuś innemu napotkać niektóre bóle głowy, które pojawiły się z układem Auto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-29 12:41:38
Autolayout może być bardzo mylące na początku. W rzeczywistości nie chcesz ustawiać rozmiaru zawartości widoku przewijania w dowolnym miejscu. Z czystym podejściem autolayout widok przewijania ustawia własny rozmiar zawartości. Zobacz sekcję autolayout i UIScrollView
w iOS 6 release notes :
Ograniczenia w podwidywaniach widoku przewijania muszą skutkować rozmiar do wypełnienia, który jest następnie interpretowany jako rozmiar zawartości widok przewijania. (Nie należy tego mylić z metoda intrinsicContentSize używana do automatycznego układu.)
Należy zauważyć, że oznacza to, że ograniczenia dotyczące podwidań widoku przewijania muszą ustawiać jawne szerokości i wysokości, a nie używać szerokości, które różnią się w zależności od aspektów widoku przewijania.
Drugi błąd polega na tym, że ustawiasz ramkę UIImageView
Na Rozmiar obrazu. W przypadku autolayout jest to również niepotrzebne. UIImageView
w rzeczywistości ma intrinsicContentSize
, który jest rozmiarem bazowego obrazu. (Aby to zmienić należy ustawić ograniczenia dla szerokości i wysokości z wysokim priorytetem) oznacza to, że przy automatycznym układzie, aby umieścić obraz w widoku przewijania i mieć go przewijać, poprawny kod powinien być następujący:
** nothing at all!!! **
Ale nadal jest coś, na co musisz uważać, co może spowodować, że obraz nie będzie się przewijał, a podpowiedź znajduje się we wspomnianych uwagach do wydania:
Zauważ, że możesz sprawić, że widok podrzędny widoku przewijania będzie wyświetlany jako float (nie przewijać) nad drugim przewijaniem treści poprzez tworzenie ograniczeń pomiędzy widokiem A widokiem poza podzbiorem widoku przewijania, np. widok przewijania jest superview.
Tzn. jeśli ustawisz ograniczenia w kreatorze interfejsów i ograniczysz widok obrazu do widoku powyżej widoku przewijania w hierarchii, wpłynie to na sposób przewijania widoku. Mad!
Szczęśliwego Kodowania...Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-13 22:32:26