最近因为这个原因,我把头发拉了出来。我还是一名新手iOS开发者,因此我们非常感谢一个简单的解决方案。
我有一个带有三个视图的UIPageViewController,中间视图是一个UITableView,我以编程方式填充数据并尝试制作像网格一样的布局。当UITableView有太多数据时,信息会在屏幕之外。
我尝试禁用自动布局并将UITableView添加到UIScrollView,使UITableView能够水平滚动。我设法做到了这一点,但不知何故,交互是混乱的,大多数时候,当尝试水平滚动表时,它捕获UIPageViewController交互。桌子的垂直滚动也没有很好的反应。
这种情况有没有已知的解决方案?
答案 0 :(得分:0)
在测试了一些事情后,我最终得到了一个使用autolayout的可接受的解决方案。
首先,我添加了一个UIScrollView,并在UIScrollView中添加了UITableView。 我已启用分页并在UIScrollView中禁用水平弹跳。
在UITableView中,我基本上禁用了与弹跳分页和滚动相关的所有内容。
由于数据以编程方式填充为某种网格,我必须知道最长行的总宽度,我已经创建了一些方法来计算最大宽度并排列标签。
我还为表格Width和Height创建了约束,我在计算完毕后计算并更新了这些约束。
-(void) ArrangeTable
{
for (int i= 0; i < [arrayTable count]; i++) {
for (int j=0; j< [[arrayTable objectAtIndex:i ] count]; j++) {
UILabel * nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 8.0, 95.0, 30.0)];
[nameLabel setText:[NSString stringWithFormat:@"%@",[[arrayTable objectAtIndex:i] objectAtIndex:j]]];
[nameLabel sizeToFit];
float widthIs = [nameLabel.text
boundingRectWithSize:nameLabel.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{ NSFontAttributeName:nameLabel.font }
context:nil].size.width;
[self alignLabels:j currentWidth:[NSNumber numberWithFloat: widthIs]];
}
}
}
-(void) alignLabels:(int)colNumber currentWidth:(NSNumber*)labelWidth
{
if(colNumber >= [arrayLabelWidth count])
{
//Insert without position
[arrayLabelWidth addObject:labelWidth];
}else if ([labelWidth floatValue] > [[arrayLabelWidth objectAtIndex:colNumber] floatValue] )
{
[arrayLabelWidth replaceObjectAtIndex:colNumber withObject:labelWidth];
}
}
-(void) setMaxRowWidth
{
float widthTV =[[arrayLabelWidth valueForKeyPath:@"@sum.self"] floatValue] + ([arrayLabelWidth count]) * 10;
CGRect screenRect = [[UIScreen mainScreen] bounds];
float heightTV = [self tableViewHeight];
if(widthTV > screenRect.size.width)
{
tvWidth.constant = widthTV;
//svWidth.constant = valueTV;
}else{
if (UIDeviceOrientationIsPortrait(self.interfaceOrientation)){
//DO Portrait
tvWidth.constant = screenRect.size.width;
}else{
//DO Landscape
float calc = screenRect.size.width - self.view.frame.size.width;
tvWidth.constant = screenRect.size.width - calc;
}
}
tvHeight.constant = heightTV;
}
- (CGFloat)tableViewHeight
{
[tablePod layoutIfNeeded];
return [tablePod contentSize].height;
}