我遇到问题是因为我缺乏对iOS平台的了解。我有一个视图控制器User Profile
。主视图具有下一个结构:ScrollView
包含一个子视图,并且此UIView
具有7个UIViews
以及UILabels
,UItextViews
,UIImageViews
等。每个视图均显示有关用户的特定信息。问题-该视图的数据是从服务器获取的,并且可能有所不同。例如,我有一个子视图“教育”,其中包含下一个信息:机构名称,学位,学习年限等。但是一个用户可以接受多次教育。因此,此视图的大小可以是动态的。但是我不能简单地用view.frame = CGRectMake
更改视图大小,因为在它下面我具有视图工作经验等。或者例如专业技能视图:对于一个用户来说,它可以是一项技能,也可以是一百项技能-所以我需要更改此视图的大小,但是在它下面有另一个视图,因此我需要移动它,依此类推。那么问题是解决这种情况的正确方法是什么?我知道我不能只使用view.frame= CGRectMake()
更改视图框架-因为它工作量太大,而且我认为这是一种愚蠢的方法。我知道对于这个非常普遍的问题,必须有一些更直接的方法,可能是autolayout
还是其他?无论如何,我希望对如何制作具有动态内容的视图有所帮助和建议。
最佳答案
我真的不知道你为什么说“我不能只是改变镜框”。当然可以!
在这种情况下,我始终采用的方法(视图的高度可变)是声明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;
就是这样。
希望这可以帮助!
关于ios - 如何在iOS中创建具有动态内容的 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19595590/