2015-01-12 2 views
0

Как изменить размер представления программно в iOS.ios изменить размер изображения динамически

Я разрабатываю приложение IOS в Objective C.

У меня есть несколько представлений, которые скрыты и показанные в соответствии с определенной логикой, используя следующий метод:

-(void)hideGroupStats{ 
    [groupTimeToFinishForeText setHidden:YES]; 
    [lblTimeToFinish setHidden:YES]; 
    [groupTimeToFinishBG setHidden:YES]; 
} 

под ними в моем в иерархии представлений есть представление, содержащее карту с «режимом масштабирования для соответствия». Однако, когда другие взгляды скрыты, он не изменяет размер, чтобы принять пространство.

Я новичок в разработке ios, поэтому я мог бы пропустить сотти очень просто.

+0

вы просто скройте свой взгляд, чтобы они исчезли не удалены Из супервизора !! понял?? Поэтому вместо этого вам нужно удалить этот вид из супервизора и добавить его обратно, так как ваше состояние стало истинным или ложным! –

+0

Вы используете раскадровки? – FreeNickname

+0

Я использую раскадровки. –

ответ

1

согласно Apple documentation for UIView (см извлечение ниже) при вызове setHidden:YES это не удаляет вид из его SuperView это только делает его исчезнуть так что все равно там вы просто не можете его увидеть. Есть несколько способов, чтобы скрыть вид, так что вы можете повлиять, что вы после этого, но главный один я бы с изменяет в UIView сек кадр (как David Ansermot s, как говорит данный +1)

mapView.frame = CGRectMake(newX, newY, newWidth, newHeight); 

с newX, newY, newWidth и newHeight все переменные, которые вы задали где-то, чтобы определить размер и местоположение UIView. Однако я бы придерживаться этой линии в какой-то анимации, чтобы дать пользователю лучший пользовательский опыт, так что я бы лично сделать что-то вроде:

- (void)showView:(UIView *)view withAnimationForFrame:(CGRect)frame 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 

    view.frame = CGRectMake(frame); 

    [UIView commitAnimations]; 
} 

- (void)hideView:(UIView *)view withAnimationForFrame:(CGRect)frame 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

    view.frame = CGRectMake(frame); 

    [UIView commitAnimations]; 
} 

Изменение размера кадра и/или местонахождение должны сделать другие виды, вы хотите масштабировать делать это автоматически, как вы хотите.

Extract from Apple Documentation for UIView

Установка значения этого свойства в YES скрывает приемник и установив ее на NO показывает приемник. Значение по умолчанию: NO.

Скрытый вид исчезает из окна и не принимает входные события. Тем не менее, он остается в списке подсмотров своего супервизора и участвует, как обычно, в авторезистировании. Скрытие представления с помощью subviews приводит к скрытию этих подзонов и любых потомков представлений, которые они могут иметь. Этот эффект является неявным и не изменяет скрытое состояние потомков получателя.

Скрытие представления, которое является текущим первым ответчиком окна, приводит к тому, что следующий действительный ключевой вид представления станет новым первым ответчиком.

Значение этого свойства отражает только состояние приемника и не учитывает состояние предков получателя в иерархии представлений. Таким образом, это свойство может быть NO, но приемник все еще может быть скрыт, если предок скрыт.

+0

Благодарим за отзыв. –

+0

Есть ли способ получить высоту снятого вида и вида карты, чтобы он мог масштабироваться до нужного размера? –

1

Вы должны добавить код, чтобы изменить ваш взгляд, как:

mapView.frame = CGRectMake(newX, newY, newWidth, newHeight); 
0

вы можете сразу установить рамки вашей точки зрения, как: -

[yourViewObject SetFrame: CGRectMake (newX, Newy, newWidth, newHeight)];

И если вы хотите установить рамку вашего взгляда на зависимом любой другом вид (показать на карту), то вы можете просто использовать: -

yourviewObj.frame = mapview.frame 

Надеется, что это будет полезно для вас

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