2013-02-28 2 views
1

Я хочу отображать предупреждающий пузырь, когда пользователь вводит недействительный адрес электронной почты. Я могу успешно показать пузырь, но в то время как пузырь присутствует, если ориентация изменяется пузырь перекрывается с UITextFieldUitextfield и UIImageView перекрываются при изменении ориентации.

Смотреть начало как пейзаж: enter image description here

ориентация становится Портрет:

enter image description here

Другой путь вокруг:

Просмотреть начато как портрет:

enter image description here

ориентация становится Landscape (пузырь идет дальше)

enter image description here

Мой код:

//image for warnings 
     //get screen size 
     CGRect screenRect = [[UIScreen mainScreen] bounds]; 
     float bubleOriginx; 

     //detect device orientation 
     UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
     if(orientation == UIInterfaceOrientationLandscapeLeft || orientation== UIInterfaceOrientationLandscapeRight) 
     { 
      bubleOriginx=screenRect.size.width*0.95; 

     }else 
     { 
      bubleOriginx=screenRect.size.width*0.72; 
     } 


     UIImage *bubble = [[UIImage imageNamed:@"create event button.png"] 
         resizableImageWithCapInsets:UIEdgeInsetsMake(15, 21, 15, 21)]; 
     self.emailImage = [[UIImageView alloc] initWithImage:bubble]; 


     self.emailImage.frame = CGRectMake(bubleOriginx, self.email.frame.origin.y+28, 0, 0); 
     UILabel *xlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 
     xlabel.font = [UIFont fontWithName:@"Helvetica" size:15.0]; 
     xlabel.text = string; 
     xlabel.numberOfLines = 0; 

     CGSize labelSize = [xlabel.text sizeWithFont:xlabel.font 
            constrainedToSize:xlabel.frame.size 
             lineBreakMode:xlabel.lineBreakMode]; 
     xlabel.frame = CGRectMake(
           xlabel.frame.origin.x, xlabel.frame.origin.y, 
           xlabel.frame.size.width, labelSize.height); 


     [xlabel setBackgroundColor:[UIColor clearColor]]; 
     [self.emailImage addSubview:xlabel]; 
     self.emailImage.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin; 

     [self.view addSubview:self.emailImage]; 

     [UIView animateWithDuration:0.85 
         animations:^(void) { 
          self.emailImage.frame = CGRectMake(bubleOriginx, self.email.frame.origin.y+28, 220, -60); 
          xlabel.frame = CGRectMake(10, 0, 210, 60); 
         } completion:^(BOOL finished) { 

         }]; 

Как я могу стабильным, что UIImageview так это обыкновение пересекаться? Допустим, он всегда останется на расстоянии +30 пунктов от конечной точки uitextfield или, по крайней мере, не будет перекрываться.

Спасибо, Mord

+0

Вы используете iOS 6? В этом случае вы можете использовать ограничения автоматической компоновки вместо автоматических масок, которые намного мощнее и допускают такие ограничения. –

+0

Нет, это 5.1. Приложение должно быть совместимо с IOS 5.1 и выше. –

ответ

0

Это происходит из-за autoResizingMask

self.emailImage.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin; 

Держите UIViewAutoresizingFlexibleRightMargin; (Не будет вести себя так, как вы ожидаете)

Но установка origin.x на изменение ориентации решит его.

CGRect tempFrame = self.emailImage.frame; 
tempFrame.origin.x = textField.frame.origin.x+textField.frame.size.width+30; 
self.emailImage.frame = tempFrame; 

для всех направлений. Предполагая, что textField является ссылкой на UITextField, который вы указали на изображении.

+0

Что вы подразумеваете под установкой origin.x при изменении ориентации, это решит его? Итак, я должен определить изменение ориентации с уведомлением и применить ваше решение при получении уведомления? –

+0

Это было бы способом или в представлении контроллера 'shouldAutorotateToInterfaceOrientation:', проверьте наличие пузыря и напишите там этот код. Но прежде чем делать все, что видит, если изменение autoResizeMask решает проблему (даже если у вас нет полного контроля) – Rakesh

+0

Я уже пробовал 'UIViewAutoresizingFlexibleRightMargin', прежде чем отправлять мой вопрос, он не работает. –

Смежные вопросы