我注意到 Chrome 和 Safariposition: sticky对元素的处理略有不同。
具体来说,当粘性元素变得更高,并且窗口当前滚动以使粘性元素偏离其初始位置时,Chrome 将以scrollTop相同的量改变位置 - 使内容的外观保持静止,而粘性元素长在顶部。
在 Safari 中,scrollTop在这种情况下位置保持不变,内容看起来向下移动以适应粘性元素增加的高度。
我在下面创建了一个代码片段来演示浏览器在这种情况下的行为方式。上面的屏幕截图显示了该演示在每个浏览器上的表现,但您可以在这里亲自尝试。
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)我有一个叫做的课ABCCalendarView.它需要一个NSCalendar,并从其委托中获取此对象.我正在尝试解决这个委托方法的问题,我想要适应Cocoa框架的最佳实践.
根据Apple的"可可编码指南"的"命名方法"部分,我应该:
通过标识发送消息的对象的类来启动名称:
Run Code Online (Sandbox Code Playgroud)- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row; - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;类名省略前缀,第一个字母为小写.
冒号附加到类名(参数是对委托对象的引用),除非该方法只有一个参数,即发送者.
Run Code Online (Sandbox Code Playgroud)- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
这表明我应该调用该方法:
- (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的指导方针与他们实际做的事情之间似乎存在差异?在创建一个基本上只是设置调用对象属性的委托方法时,应该遵循什么约定?
我正在开发一个 iOS 应用程序,理想情况下我希望包含 Google Analytics 和 AdMob(通过 Firebase)。
如果没有必要,我还想避免显示同意书 - 可能是通过不访问 iOS 广告标识符 (IDFA)。但对于在这种情况下是否需要同意,我找不到任何明确的答案。
我知道:
我发现的唯一其他相关问题是这个问题,它建议我可以将此信息放入我的隐私政策中,但该答案是从 2015 年开始的,即 GDPR 生效之前。
所以我的问题是:
iOS 上的 Google/Firebase Analytics 是否使用本地存储?它是否收集 GDPR 所称的“个人身份信息”(例如 IP 地址)?如果其中任何一个的答案是肯定的,我是否认为我需要获得欧洲经济区/英国用户的明确同意才能使用分析?
AdMob 是否因为使用 IDFA 而只需要欧洲经济区/英国用户的同意?如果是这样,我是否可以不包含 AdSupport 框架(从而禁用 IDFA),从而不必获得同意?
App Store 政策中是否有任何内容要求在使用分析或非个性化广告之前获得同意?
需要明确的是,我并不是想向我的用户隐瞒任何事情。如果必须发送个人数据才能提供这些服务并且没有办法解决这个问题,那么我会很乐意出示同意书。我不想从用户的设备上发送任何识别数据,但我需要能够展示某种形式的广告来支持该应用程序,并且我希望能够查看简单的分析。