我有一个背景颜色设置的UIView A,它包含一个UIView B,其高度可以动态改变。当UIView B的高度超过UIView A时,UIView A的高度是否可以自动匹配UIView B?
我尝试过使用Autosizing,但似乎只是为了调整子视图相对于其父视图的大小,而不是相反。
我也知道有一个名为sizeToFit
的方法,但每次内容更改时都需要手动调用。没有其他选择吗?
答案 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对象希望它会有所帮助