小编Cra*_*own的帖子

为什么更改“position:sticky”元素的高度会改变 Chrome 上的滚动位置,但不会改变 Safari 上的滚动位置?

我注意到 Chrome 和 Safariposition: sticky对元素的处理略有不同。

具体来说,当粘性元素变得更高,并且窗口当前滚动以使粘性元素偏离其初始位置时,Chrome 将以scrollTop相同的量改变位置 - 使内容的外观保持静止,而粘性元素长在顶部。

Chrome位置粘性行为演示

在 Safari 中,scrollTop在这种情况下位置保持不变,内容看起来向下移动以适应粘性元素增加的高度。

Safari 位置粘性行为演示

我在下面创建了一个代码片段来演示浏览器在这种情况下的行为方式。上面的屏幕截图显示了该演示在每个浏览器上的表现,但您可以在这里亲自尝试。

function grow() {
  const header = document.getElementById("header");
  document.getElementById("header").classList.toggle("large-header");
  updateScrollText();
}

function updateScrollText() {
	const container = document.getElementById("container");
	const scrollParent = getScrollParent(container);
  document.getElementById("scrollbarpos1").innerHTML = scrollParent.scrollTop;
  document.getElementById("scrollheight1").innerHTML = scrollParent.scrollHeight;
  document.getElementById("containerheight1").innerHTML = container.offsetHeight;
  document.getElementById("scrollbarpos2").innerHTML = scrollParent.scrollTop;
  document.getElementById("scrollheight2").innerHTML = scrollParent.scrollHeight;
  document.getElementById("containerheight2").innerHTML = container.offsetHeight;
}

function getScrollParent(node) {
  if (node == null) {
    return null;
  }

  if (node.scrollHeight > node.clientHeight) {
    return node;
  } else { …
Run Code Online (Sandbox Code Playgroud)

html css css-position sticky

7
推荐指数
1
解决办法
3955
查看次数

除了委托对象之外没有参数的委托方法的正确命名约定?

我有一个叫做的课ABCCalendarView.它需要一个NSCalendar,并从其委托中获取此对象.我正在尝试解决这个委托方法的问题,我想要适应Cocoa框架的最佳实践.

根据Apple的"可可编码指南"的"命名方法"部分,我应该:

  • 通过标识发送消息的对象的类来启动名称:

    - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;
    - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
    
    Run Code Online (Sandbox Code Playgroud)

    类名省略前缀,第一个字母为小写.

  • 冒号附加到类名(参数是对委托对象的引用),除非该方法只有一个参数,即发送者.

    - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
    
    Run Code Online (Sandbox Code Playgroud)

这表明我应该调用该方法:

- (NSCalendar *)calendarViewUsesCalendar:(ABCCalendarView *)calendarView;
Run Code Online (Sandbox Code Playgroud)

但是,在Cocoa框架中查看这种情况的实际示例,我可以看到使用的实际约定似乎更倾向于在这种情况下将类名放在方法名称的末尾.例如:

// UITableViewDataSource has the method:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

// UITableViewDelegate has:
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView

// UIScrollView has:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
Run Code Online (Sandbox Code Playgroud)

如果我遵循这个建议我应该调用我的方法的约定:

- (NSCalendar *)calendarForCalendarView:(ABCCalendarView *)calendarView;
Run Code Online (Sandbox Code Playgroud)

为什么Apple的指导方针与他们实际做的事情之间似乎存在差异?在创建一个基本上只是设置调用对象属性的委托方法时,应该遵循什么约定?

cocoa objective-c naming-conventions

5
推荐指数
1
解决办法
499
查看次数

我是否需要征得同意才能在不使用 IDFA 的 iOS 应用中使用 Google Analytics 和 AdMob?

我正在开发一个 iOS 应用程序,理想情况下我希望包含 Google Analytics 和 AdMob(通过 Firebase)。

如果没有必要,我还想避免显示同意书 - 可能是通过不访问 iOS 广告标识符 (IDFA)。但对于在这种情况下是否需要同意,我找不到任何明确的答案。

我知道:

  • 我们必须在欧盟境内某人访问的网页上征求 Analytics 的同意,因为电子隐私指令要求同意所使用的 cookie。iOS 应用程序不使用 cookie,但同样的法律适用于其他类型的本地存储。(来源:gdpr.eu
  • 我们必须征得同意才能向欧洲经济区或英国的用户展示个性化广告,因为需要 IDFA,并且根据 GDPR,这将被视为个人数据。我们还必须征求同意才能显示非个性化广告,因为 Google 也使用 IDFA 来处理这些广告。(来源:Google AdMob 政策文件
  • Google 自己的政策要求我们要求欧洲经济区/英国用户同意使用 Cookie 和本地存储,以及使用个人数据来提供个性化广告,以便使用 Google 的服务。(来源:Google 欧盟用户同意政策

我发现的唯一其他相关问题是这个问题,它建议我可以将此信息放入我的隐私政策中,但该答案是从 2015 年开始的,即 GDPR 生效之前。

所以我的问题是:

  1. iOS 上的 Google/Firebase Analytics 是否使用本地存储?它是否收集 GDPR 所称的“个人身份信息”(例如 IP 地址)?如果其中任何一个的答案是肯定的,我是否认为我需要获得欧洲经济区/英国用户的明确同意才能使用分析?

  2. AdMob 是否因为使用 IDFA 而只需要欧洲经济区/英国用户的同意?如果是这样,我是否可以不包含 AdSupport 框架(从而禁用 IDFA),从而不必获得同意?

  3. App Store 政策中是否有任何内容要求在使用分析或非个性化广告之前获得同意?

需要明确的是,我并不是想向我的用户隐瞒任何事情。如果必须发送个人数据才能提供这些服务并且没有办法解决这个问题,那么我会很乐意出示同意书。我不想从用户的设备上发送任何识别数据,但我需要能够展示某种形式的广告来支持该应用程序,并且我希望能够查看简单的分析。

google-analytics privacy admob ios firebase-analytics

5
推荐指数
1
解决办法
2845
查看次数