Probleme resize rotation ecran

guittonewsguittonews Membre
06:17 modifié dans API UIKit #1
Bonjour,
je suis de nouveau confronté à  un problème. Comme indiqué dans le titre, une de mes vues ne se "resize" pas comme elle le devrait (ou plutot comme je le voudrais :D). Cependant cela est vrai que dans un cas particulier et je pense avoir identifier la cause mais je n'arrive pas à  en trouver la solution.

La situation : j'ai un tableView (liste de photo), lorsque je clic sur une ligne j'arrive sur une nouvelle vue (WebView) qui contient la photo elle meme. Dans le navMenu j'ai deux boutons qui me permettent de switcher entre la photo et les détails de la photo (tableView).

Le cas : le problème se situe sur le resize de la vue "detail" lorsque je viens de la liste photo avec l'appareil en mode horizontal. Je m'explique. Si je consulte la liste de photo en mode "verticale" que je clic sur l'une d'entre elle j'arrive sur la photo et je peux consulter les détails sans aucun problème lors de la rotation de l'appareil. Par contre quand je consulte les photos en mode "horizontal" et que je veux consulter les détails de l'une d'entre elle ma vue detail ne prend pas tout l'ecran...je pense donc que cela viens de l'initialisation de ma vue. J'ai essayé beaucoup de chose sans succès. Ci dessous le code.


- (void)loadView {<br />	<br />	<br />	UISegmentedControl * control=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@&quot;Image&quot;,@&quot;Détails&quot;,nil]];<br />	<br />&nbsp; &nbsp; // On définit le style du bouton, on mémorise la couleur par défaut<br />&nbsp; &nbsp; control.segmentedControlStyle=UISegmentedControlStyleBar;<br />&nbsp; &nbsp; defaultTintColor=control.tintColor;<br />	<br />&nbsp; &nbsp; // On sélectionne le premier segment<br />	control.selectedSegmentIndex = 0;<br />	<br />&nbsp; &nbsp; // On ajuste la taille<br />&nbsp; &nbsp; control.autoresizingMask=UIViewAutoresizingFlexibleWidth;<br />&nbsp; &nbsp; control.frame = CGRectMake(0, 0, 400, control.frame.size.height);<br />	[control addTarget:self action:@selector(changeView:) forControlEvents:UIControlEventValueChanged];<br />&nbsp; &nbsp; // On installe le segmentedControl<br />&nbsp; &nbsp; self.navigationItem.titleView=control;<br />	[control release];<br />	<br />	<br />	<br />	[self.toph setImgWide];<br />	NSURLRequest *requestObj=[[NSURLRequest alloc] initWithURL:self.toph.url];<br />	<br />	self.view=[[UIView alloc]initWithFrame:CGRectMake(0.,0.,320.,480.-20.-44.)];<br />	self.view.backgroundColor=[UIColor blackColor];<br />	self.view.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin);<br />	<br />	<br />	<br />	//concerne la vue &quot;photo&quot;<br />	webView=[[UIWebView alloc] initWithFrame:CGRectInset(self.view.frame,0.,0.)];<br />	webView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin);<br />	[webView loadRequest:requestObj];<br />	<br />	<br /><br />	<br />	//concerne la vue &quot;detail&quot;<br />	textView=[[UITableView alloc] initWithFrame:CGRectInset(self.view.frame,0.,0.) style:UITableViewStylePlain]; //&lt;----------- je pense que le probleme viens de la<br />	textView.autoresizingMask= (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight );<br />		<br />	<br />	[self.view addSubview:webView];<br />	//webView.delegate=self;<br />}<br /><br /><br />-(IBAction) changeView:(id)sender {<br />		switch(((UISegmentedControl*)sender).selectedSegmentIndex) {<br />&nbsp; &nbsp; &nbsp; &nbsp; case 0:<br />			<br />			[self.view addSubview:webView];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case 1:<br />			[self.view addSubview:textView];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; }<br />}<br /><br />


Merci d'avance pour tout vos commentaires.

antoine

Réponses

  • Philippe49Philippe49 Membre
    06:17 modifié #2
    Il faut intervenir dans les méthodes associées :

    – shouldAutorotateToInterfaceOrientation: 
    – willRotateToInterfaceOrientation:duration:
    – willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
    – willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
    – didRotateFromInterfaceOrientation:
    et peut-être encore d'autres (voir la doc de UIViewController)
  • guittonewsguittonews Membre
    06:17 modifié #3
    Merci de répondre aussi vite!

    Ok je vais continuer à  chercher de ce coté là . Ce qui m'étonne c'est que j'ai bien le comportement voulu dans un des cas....

    Merci :)
  • Philippe49Philippe49 Membre
    06:17 modifié #4
    Voir également les flags autoresizesSubviews et autoresizingMask des UIView qui correspondent à  des réglages dans IB.
  • guittonewsguittonews Membre
    06:17 modifié #5
    Encore une fois merci philippe de m'avoir bien aiguiller vers des methodes dont je ne comprenais pas l'interet à  prime abord.

    Pour ceux qui pourraient avoir le même problème :
    -(IBAction) changeView:(id)sender {<br />		switch(((UISegmentedControl*)sender).selectedSegmentIndex) {<br />&nbsp; &nbsp; &nbsp; &nbsp; case 0:<br />			<br />			self.view=webView;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case 1:<br />			self.view=textView;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; }<br />}<br /><br /><br />// Override to allow orientations other than the default portrait orientation.<br />- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {<br />&nbsp; &nbsp; // Return YES for supported orientations<br />&nbsp; &nbsp; //return (interfaceOrientation == UIInterfaceOrientationPortrait);<br />	return YES;<br />}<br /><br /><br /><br /><br />-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration<br />{<br />	[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];<br />	<br />	if (toInterfaceOrientation == (UIInterfaceOrientationLandscapeRight|UIInterfaceOrientationLandscapeLeft|UIInterfaceOrientationPortrait))<br />	{<br />		self.view.autoresizingMask= (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight );<br />		<br />	}<br />}
    



    encore merci :) :)
Connectez-vous ou Inscrivez-vous pour répondre.