ios - 无法从其 subview 中获取正确的 UIScrollView 高度

标签 ios objective-c

<分区>

在我的 UIViewControllerviewDidLoad 中,我创建了:

一个 UIScrollView,代码如下:

- (void)generateScrollView {
    
    _scrollView = [[UIScrollView alloc] initWithFrame:_containerView.frame];
    [_containerView addSubview:_scrollView];
    
    [self generateContentView];
    
}

_containerView 是通过 Interface Builder 创建的 UIView,具有以下约束:

enter image description here

然后我生成另一个 UIView,我将它用作所有 UI 元素的容器:

- (void)generateContentView {
    
    _contentView = [[UIView alloc] initWithFrame:_scrollView.frame];
    
    [_scrollView addSubview:_contentView];
    
}

然后我生成了 N 个 UI 元素(UITextViewUIImageView ecc..),最后我重新计算了 contentViewscrollView 使用以下代码:

- (void)recalculateScrollViewHeight {
    
    CGRect contentRect = CGRectZero;
    for (UIView *view in _contentView.subviews) {
        contentRect = CGRectUnion(contentRect, view.frame);
        
        NSLog(@"ContentRect height: %f", contentRect.size.height);
    }
    
    _contentView.frame = CGRectMake(_contentView.frame.origin.x, _contentView.frame.origin.y, _contentView.frame.size.width, contentRect.size.height + [[UIApplication sharedApplication] statusBarFrame].size.height + self.navigationController.navigationBar.frame.size.height);
    
    NSLog(@"_contentView height: %f", _contentView.frame.size.height);
    
    _scrollView.contentSize = _contentView.frame.size;
    
}

问题是 _scrollView 剪切了一些内容,因为计算的高度似乎不正确。我正在为这个问题苦苦挣扎,但似乎找不到解决方案,有人知道为什么计算的高度不正确吗?我是否缺少 UIScrollViewUIView 的属性?

编辑: 这是 2 NSLog 的结果:

ContentRect height: 180.000000

ContentRect height: 360.000000

ContentRect height: 540.000000

_contentView height: 604.000000

我添加了 3 个高度为 180UIImageView 所以结果是正确的,540 + 20(状态栏高度)+ 44(导航栏高度),但 scrollView 仍然从最后一张图像中剪切了一些像素。图片之间也没有额外的间距,它们是一张一张的

最佳答案

我见过 UIScrollView 会尝试通过偏移自身来提供帮助以合并导航栏的情况,即使它是隐藏的。您是否尝试过禁用此属性?

self.automaticallyAdjustsScrollViewInsets

我假设您已将 scrollEnabled 设置为 YES?这有点摸不着头脑,但我注意到其他人通过禁用和重新启用滚动来解决类似的问题:

Large Text Being Cut Off in UITextView That is Inside UIScrollView

关于ios - 无法从其 subview 中获取正确的 UIScrollView 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164282/

上一篇:ios - Objective C setFrame 不适用于 UIView

下一篇:ios - Int转String时不显示[Swift]

相关文章:

ios - 在 iPad 上编辑时编辑表格 View 缺少背景颜色

iphone - boolean 值没有在正确的时刻设置

objective-c - 具有 iPad 视网膜显示屏的模拟器

iphone - 如何检查 Facebook 帐户是否存在?

ios - 为不同的设备调整 UItableview 的大小

php - 如何使用 p8 授权 key 文件通过 PHP 连接到 apn

ios - 我们可以通过我的应用程序访问任何 iphone 应用程序中播放的任何声音并应用均衡器吗

ios - 更改 TableView 的设计 - Objective C

iphone - 使用 performSelectorOnMainThread 调用非 void 函数

ios - 在swift中调用objective-c类方法