3

我有一个表格视图,其中包含多个部分和每个部分的部分标题。如您所知,节标题随表格视图移动。因此,如果有多个部分,则当前部分的标题会粘在 tableview 的顶部,而该部分的内容会在标题下滚动。

我试图弄清楚它应该如何适应 iPhone X,因为标题上方的空间通过内容显示,正如您在此屏幕截图中注意到的那样。我查看了 Apple 关于如何适应 iPhone X 缺口的观点,但他们所有的示例顶部都有一个搜索栏视图,因此他们从未真正遇到过这个问题。

在此处输入图像描述

4

3 回答 3

1

正如您在此屏幕截图中注意到的那样,标题上方的空间通过内容显示

区分两件事:主视图(在凹槽后面延伸)和表格视图。将表格视图的顶部固定到安全区域的顶部。在 iPhone X 上,并且在 iPhone X 上,安全区的顶部会从主视图的顶部向下,安全区的底部会从主视图的底部向上,保持您的从在凹口后面向上或在指示器后面向下看的表格视图。

在此屏幕截图中,有几个单元格在 A 标题上方滚动,但您看不到它们。并且表格视图的底部没有虚拟主页指示器。

在此处输入图像描述

这只是给表视图控制器一个具有黑色背景的父视图控制器的问题。您可以在代码中执行此操作,也可以在情节提要中完全不使用代码对其进行配置。

于 2017-09-26T05:43:11.990 回答
1

这就是我最终做的事情。

我在里面添加了一个带有 UIVisualEffectView的新UIView( )。notchFIxView我把它放在视图控制器的最顶部。这是所有 tableview 之外的最顶层视图。我将顶部、左侧和右侧约束固定到超级视图(不是安全区域)。

我将此视图的底部固定到安全区域的顶部。

UIScrollViewDelegate在接口中添加了协议,并添加了以下用于 iPhoneX 检测的宏:

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_X (IS_IPHONE && SCREEN_MAX_LENGTH == 812.0)

我在界面中添加了一个BOOL checkIfNotch;变量并在 viewDidLoad 中对其进行了初始化:

checkIfNotch = IS_IPHONE_X;

然后最终显示/隐藏notchFIxView发生如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    if (checkIfNotch) {
        static CGFloat lastY = 0;

        CGFloat currentY = scrollView.contentOffset.y;

        if ((lastY <= tableheaderviewHeight) && (currentY > tableheaderviewHeight)) {
            NSLog(@" ******* Header view just disappeared");

            self.notchFIxView.hidden=NO;
            [UIView animateWithDuration:0.3 animations:^{
                self.notchFIxView.alpha=1;
            } completion:^(BOOL finished) {

            }];

        }

        if ((lastY > tableheaderviewHeight) && (currentY <= tableheaderviewHeight)) {
            NSLog(@" ******* Header view just appeared");

            [UIView animateWithDuration:0.3 animations:^{
                self.notchFIxView.alpha=0;
            } completion:^(BOOL finished) {
                self.notchFIxView.hidden=YES;
            }];
        }

        lastY = currentY;
    }
}

在此之后,它看起来好多了:

在此处输入图像描述

于 2017-09-30T18:02:00.070 回答
0

如果您有兴趣,那么您可以查看这个 github 页面,它使您能够解决这个缺口问题:

https://github.com/HarshilShah/NotchKit

于 2017-09-26T05:14:46.143 回答