我遇到问题是因为我缺乏对iOS平台的了解。
我有一个视图控制器User Profile
。主视图中具有下一个结构:ScrollView
其包含一个子视图和该UIView
具有7UIViews
与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;
就是这样。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句