Автоматически расширять UIView на основе контента? - PullRequest
3 голосов
/ 20 июля 2011

У меня есть UIView A с установленным цветом фона, и он содержит UIView B, высота которого может динамически изменяться. Когда высота UIView B превышает UIView A, возможно ли, чтобы высота UIView A автоматически соответствовала высоте UIView B?

Я пытался использовать Авторазмер, но, похоже, он предназначен только для изменения размера дочернего представления относительно его родителя, а не наоборот.

Я также знаю, что существует метод, называемый sizeToFit, но его нужно вызывать вручную каждый раз, когда изменяется содержимое. Разве нет другой альтернативы?

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

Хотя и не полностью автоматический, вы можете использовать Наблюдение значения ключа , чтобы прослушать изменения содержимого, а затем выполнить изменение размера UIView там. Это предотвращает не засорять ваш код кодом, чтобы изменять размеры представлений везде, где изменяется содержимое.

Например (если вы делаете это в UIViewController):

// Somewhere when the view is loaded, probably in -(void)viewDidLoad do this:
[self addObserver:self forKeyPath:@"viewA.frame" options:0 context:NULL];

// Then, implement this method
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    // Resize your views, either using sizeToFit, Purple Ninja's method, or another method
}

// Finally, make sure to unregister in dealloc:
- (void)dealloc {
    [self removeObserver:self forKeyPath:@"viewA.frame"];
    // ...
    [super dealloc];
}

См. Ссылка на протокол NSKeyValueObserving для получения дополнительной информации

1 голос
/ 20 июля 2011

Каждый раз, когда высота UIView B изменяется, попробуйте это:

if(CGRectGetHeight(B.frame)>CGRectGetHeight(A.frame)) {
    A.frame = CGRectMake(CGRectGetX(A.frame),CGRectGetY(A.frame),CGRectGetWidth(A.frame),CGRectGetHeight(B.frame));
}
0 голосов
/ 30 января 2013

Вы также можете использовать этот код из моего запущенного приложения

CGRect frame=CGRectMake(0, 0,, 405);
        frame.origin.x=self.ScrollView.frame.size.width *i;
        frame.origin.y=0;


        frame.size=self.ScrollView.frame.size;
        UIImageView *subimg=[[UIImageView alloc]initWithFrame:frame];
        imageView.userInteractionEnabled = YES;
        imageView.autoresizingMask = ( UIViewAutoresizingFlexibleWidth );
        subimg.image=[array objectAtIndex:i];
        [self.ScrollView  addSubview:subimg];
        [subimg release];

        self.ScrollView.contentSize=CGSizeMake(self.ScrollView.frame.size.width*array.count, self.ScrollView.frame.size.height);
           [self.view addSubview:imageView];

Hear scrollview - это объект scrollview, объявленный в .h

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...