我真的不知道您为什么说“我不能只更改视图框架”。当然可以!
对于这种情况(您的视图的高度是可变的),我总是采用的方法是声明一个yOffset
属性,并在此基础上将我的内容放在正确的y
位置。
@property (nonatomic, assign) int yOffset;
然后在init
方法中,我将此属性初始化为 0 或某个预定义的初始边距。
_yOffset = TOP_MARGIN;
然后考虑以下场景:具有n
多种技能的用户配置文件。这就是您使用该yOffset
属性的方式。
for (int i=0; i<n; ++i)
{
// place the skillView at the right 'y' position
SkillView *skillView = [[SkillView alloc] initWithFrame:CGRectMake(0,self.yOffset,300,50)];
// configure the skillView here
[self.view addSubview:skillView];
// Don't forget it has to be "+=" because you have to keep track of the height!!!
self.yOffset += skillView.frame.size.height + MARGIN_BETWEEN_SKILLS;
}
然后想象用户个人资料有c
多个教育条目;一样:
for (int i=0; i<c; ++i)
{
// place the educationView at the right 'y' position
EducationView *educationView = [[EducationView alloc] initWithFrame:CGRectMake(0,self.yOffset,300,50)];
// configure the educationView here
[self.view educationView];
// Don't forget it has to be "+=" because you have to keep track of the height!!!
self.yOffset += educationView.frame.size.height + MARGIN_BETWEEN_EDUCATIONS;
}
最后,当所有子视图都添加完毕后,您必须更改包含视图的框架。(因为当你创建它时,你无法预先知道它会有多高)
CGRect viewFrame = self.view.frame;
viewFrame.size.height = self.yOffset + BOTTOM_MARGIN;
self.view.frame = viewFrame;
就是这样。
希望这可以帮助!