根据内容自动展开UIView?

时间:2011-07-20 00:11:35

标签: iphone objective-c ios ipad

我有一个背景颜色设置的UIView A,它包含一个UIView B,其高度可以动态改变。当UIView B的高度超过UIView A时,UIView A的高度是否可以自动匹配UIView B?

我尝试过使用Autosizing,但似乎只是为了调整子视图相对于其父视图的大小,而不是相反。

我也知道有一个名为sizeToFit的方法,但每次内容更改时都需要手动调用。没有其他选择吗?

3 个答案:

答案 0 :(得分:2)

虽然不是全自动的,但您可以使用Key Value Observing来监听内容的更改,然后在那里进行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 Protocol Reference

答案 1 :(得分:1)

每当UIView B的身高发生变化时,请尝试以下方法:

if(CGRectGetHeight(B.frame)>CGRectGetHeight(A.frame)) {
    A.frame = CGRectMake(CGRectGetX(A.frame),CGRectGetY(A.frame),CGRectGetWidth(A.frame),CGRectGetHeight(B.frame));
}

答案 2 :(得分:0)

您也可以在我正在运行的应用程序中使用此代码

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];

听到scrollview是在.h

中声明的scrollview对象

希望它会有所帮助

相关问题