Ios 以编程方式在ViewDid出现之前定位UIView
我有两种观点。第一行包含数量可变的UIButton,这些UIButton可能会溢出到两行中。第二个需要放置在第一个的下方 我读过很多这样的帖子: 不幸的是,只有当您在Ios 以编程方式在ViewDid出现之前定位UIView,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我有两种观点。第一行包含数量可变的UIButton,这些UIButton可能会溢出到两行中。第二个需要放置在第一个的下方 我读过很多这样的帖子: 不幸的是,只有当您在viewdide:方法或更高版本中调用它们时,它们才起作用。这意味着从加载视图到正确定位图元之间的时间很短 我怎样才能优雅地解决这个问题 编辑1: 下面是一个简单的方法,我正在使用向下调整视图2 -(void)adjustView:(UIView *)view down:(int)down{ CGRect frame = v
viewdide:
方法或更高版本中调用它们时,它们才起作用。这意味着从加载视图到正确定位图元之间的时间很短
我怎样才能优雅地解决这个问题
编辑1:
下面是一个简单的方法,我正在使用向下调整视图2
-(void)adjustView:(UIView *)view down:(int)down{
CGRect frame = view.frame;
frame.origin.y = frame.origin.y + down;
view.frame = frame;
}
编辑2:
这类似于我如何添加按钮、调整第一个视图的大小以及计算下一个视图需要向下移动多远
- (void)addButtonsToView:(NSArray *)buttonStrings {
//To correctly position
float previousTagsWidth = 0.0;
self.adjustDown = 0.0;
for (NSString *str in buttonStrings) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:str forState:(UIControlState)UIControlStateNormal];
CGSize size = [str sizeWithFont:TAG_FONT];
if (previousTagsWidth + size.width > 300) {
previousTagsWidth = 0;
self.adjustDown += size.height+10;
}
button.frame = CGRectMake(previousTagsWidth, self.adjustDown, size.width+10, size.height+5);
previousTagsWidth += size.width+20;
[self.view1 addSubview:button];
}
CGRect frame = self.view1.frame;
frame.size.height = frame.size.height+self.adjustDown;
self.view1.frame = frame;
}
为什么不在
viewWillLayoutSubviews
或viewdillayoutsubviews
?这就是我一直在用的东西
(别忘了调用
super
!)为什么不在viewWillLayoutSubviews
或viewDidLayoutSubviews
?这就是我一直在用的东西
(别忘了调用
super
!)人眼是否能意识到您的视图在这么短的时间内被移动了?我想说不是,但是如果您遇到相反的情况,您可以将这些视图的hidden
属性设置为YES(在viewdiload
)然后在viewdide:
中将它们设置为nothidden(在设置它们的最终位置之后).人眼有可能意识到你的观点在这么短的时间内被移动了吗?我想说不是,但是如果你遇到相反的情况,你可以将这些视图的隐藏属性设置为是(在viewdiload
),然后在viewdide:
中将它们设置为不隐藏(在设置它们的最终位置之后)。尝试使用[self.view bringSubviewToFront:firstView]
或[self.view sendsubview toback:secondView]
或使用didAddSubview
请检查苹果的文档尝试使用[self.view-bringsubview-front:firstView]
或[self.view-sendsubview-toback:secondView]
或使用didAddSubview
请检查苹果文档的您是否查看了
视图显示
方法?这是在视图控制器的视图添加到窗口之前调用的,允许您在子视图可见之前对其进行布局。@AlexMDC我在ViewWillDisplay中遇到的问题与我在ViewDiLoad中遇到的问题完全相同。ViewDidDisplay中的方法与我在viewDidLoad中遇到的问题完全相同按预期工作。何时以及如何创建ui按钮?是的,但何时在viewDidLoad
中或在viewdideappear
中调用addButtonsToView:
您看过viewwillbeen
方法吗?这是在视图控制器的视图添加到窗口之前调用的,允许您在子视图可见之前对其进行布局。@AlexMDC我在viewwillbeen中遇到的问题与我在viewDidLoad中遇到的问题完全相同。viewdidebeen中的相同方法按预期工作。何时以及如何解决创建您的ui按钮
s?是的,但您何时在viewDidLoad
或viewDidAppear
中调用addButtonsToView:
这两个都不适合我。请参见我的编辑1。我正在调用super
,然后调用我的adjustView
方法。有什么提示吗?“viewWillLayoutSubviews”是做这些事情的正确位置。你能描述一下“不工作”吗?它们是如何“不工作”的如果您的布局不太复杂,请考虑在<代码> Visual Dead Load 中使用<代码> AutoRebug掩码<代码>。90%的时间为我工作。这两个都不适用于我。请参阅我的编辑1。我正在调用<代码>超级< /代码>,然后调用我的代码> ActudiVIEW/COD>方法。有什么提示吗?“VIEW WayLayOutSubVIEW”是正确的地方。事情。你能描述“不工作”吗?它们如何“不工作”?如果你的布局不太复杂,请考虑使用<代码>自动修复掩码< /代码> <代码> VIEWDIDLoad 。为我工作了90%的时间。