更改 UIView 框架大小不会更改 UITableview 框架原点 y
Posted
技术标签:
【中文标题】更改 UIView 框架大小不会更改 UITableview 框架原点 y【英文标题】:Changing UIView frame size does not change UITableview frame origin y 【发布时间】:2013-08-08 17:26:46 【问题描述】:我通过拖放在 IB 中的 tableviewcontroller
顶部添加了一个 UIView,然后我将 IBoutlet
分配给了 UIView
。
问题是我有一个 uilabel 动态改变它的大小,所以如果 uilabel 很短,我想让 tableview 更近,否则 tableview 不应该那么近,所以我可以显示一个很长的标签。
所以我尝试更改位于tableview
之上的uiview
的框架,uiview 更改了它的框架大小,但 tableview 在那里保持稳定。
当我使UIview
帧大小高度更大时,我想让uitableview
下降
if ([[self agenda] getMeetingTime] != nil)
descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, dateLabel.frame.origin.y + dateLabel.bounds.size.height+15, self.view.frame.size.width-75, 150)];
descriptionLabel.textColor =[UIColor colorWithRed:96/256.0 green:96/256.0 blue:96/256.0 alpha:1.0];
descriptionLabel.font = [UIFont fontWithName:@"GillSans" size:15.0f];
descriptionLabel.text =[[self agenda] getMeetingTime];
descriptionLabel.backgroundColor = [UIColor clearColor];
descriptionLabel.numberOfLines=0;
descriptionLabel.tag=PopulateTag;
//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(709,999);
CGSize expectedLabelSize = [descriptionLabel.text sizeWithFont:descriptionLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:descriptionLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = descriptionLabel.frame;
newFrame.size.height = expectedLabelSize.height;
descriptionLabel.frame=newFrame;
if ( expectedLabelSize.height>70)
self.upperView.frame = CGRectMake(0, 0, self.upperView.frame.size.width, self.upperView.frame.size.height+expectedLabelSize.height+20);
else
self.upperView.frame = CGRectMake(0, 0, self.upperView.frame.size.width, self.upperView.frame.size.height+expectedLabelSize.height);
[ self.upperView addSubview: descriptionLabel];
//black line
UIView *line = [[UIView alloc] initWithFrame:CGRectMake(10, descriptionLabel.frame.origin.y + descriptionLabel.bounds.size.height+15, descriptionLabel.frame.size.width+50, 1)];
line.backgroundColor=[UIColor colorWithRed:164/256.0 green:165/256.0 blue:160/256.0 alpha:1.0];
line.tag=PopulateTag;
[self.upperView addSubview:line];
//this does not work pushes whole view down
//self.restOfView.frame=CGRectMake(10, line.frame.origin.y + line.bounds.size.height+1, self.upperView.frame.size.width, 600);
[restOfView reloadData];
在 IB 上:
会发生这样的事情:
Tableview 需要往下看
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:首先,我不认为你应该继承 UITableViewController
来实现你想要的。当您知道您的视图将仅包含 UITableView
时,UITableViewController
很有用,我认为在其中添加任何其他内容都会达到目的。
但要解决您的问题,请在代码底部 sn-p 取消注释您更改 tableview 框架的行(假设 self.restOfView
是您的 tableView),而不是调用 [self.restOfView reloadData]
调用:
[self.restOfView setNeedsDisplay];
reloadData
只是再次调用tableView数据源方法,setNeedsDisplay
重绘对象。我认为这会奏效。
【讨论】:
我没有继承uitableviewcontroller,只需要在tableview之上添加一个uiview,只是添加[self.restOfView setNeedsDisplay]
并没有改变任何东西,改变self.restOfView框架也会弄乱整个视图加上uiview的变化。
好吧,你的 tableview 对象是什么?
我的意思是它是.h中的一个tableview控制器EventDetailsViewController : UITableViewController
我只是使用@property (nonatomic, weak) IBOutlet UITableView *restOfView;
来控制tableview(我也可以使用self.tableview)
是的,再次阅读您的答案对不起,我正在继承Uitableviewcontroller
我的坏
好吧,这绝对是你的问题,因为 UITableViewController 中的 tableView 并不意味着要调整大小......如果你真的不想做那个改变,看看这篇文章虽然有一个解决方案, ***.com/questions/13350686/…以上是关于更改 UIView 框架大小不会更改 UITableview 框架原点 y的主要内容,如果未能解决你的问题,请参考以下文章
如何在启用自动布局的情况下更改 iOS6 中的 UIView 大小?