热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在iOS8中正确确定今日扩展左边距?

如何解决《如何在iOS8中正确确定今日扩展左边距?》经验,为你挑选了2个好方法。

我试图找出如何计算今日扩展主视图中的左边距,以将内容与今日视图标签的其余部分对齐.

这是一个使用Today扩展的干净Xcode项目的示例(我已经为视图背景添加了颜色并绘制了一条红色虚线,以说明我想要对齐Hello World的位置UILabel).

iPhone 6 Plus模拟器(左侧横向,右侧纵向)的结果可以从下图中找到:

在此输入图像描述

在图像中,请注意绿色主视图左边界的位置与应用程序名称UILabel"testi2"的位置不同.看起来红线 - 主视图左边界对齐在每个设备中都有所不同:iPhone 5x,iPhone 6和iPad.

可以使用干净的Xcode项目(我正在使用Xcode 6.1.1,iOS 8.1和Swift)重现该行为:

    创建一个空的Xcode项目(单视图应用程序)

    添加新目标:扩展程序>今天扩展程序

    从Today扩展组中,找到MainInterface.storyboard并使主视图背景为绿色,Hello世界UILabel背景为红色: 在此输入图像描述

如何将Hello World UILabel(红色背景)与虚线对齐?或者如何将主视图(绿色背景)与虚线对齐?



1> dehlen..:

你试过这个吗?

Objective-C:

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
    return UIEdgeInsetsZero;
}

迅速:

func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
        return UIEdgeInsetsZero
}

否则看起来你必须根据这个So-Thread手动设置它们:

编辑:

看起来这个方法已被弃用,并且不会为运行> = iOS10的设备调用.但是我找不到任何关于替代方案的文档.如果您有任何相关信息,请添加到此帖子,以便每个人都可以获利.只需确保在使用此功能时不会在> = iOS10上调用它.

来源:Apple文档



2> fabian789..:

我尝试使用left的值defaultMarginInset-widgetMarginInsetsForProposedMarginInsets结果喜忧参半:在iPhone 5S的屏幕尺寸,它可以用来获得相同的嵌入于iOS的默认日历控件(注意这里的时间标签的右边缘与蓝线对齐):

5S人像

5S景观

在iPhone 6上,您会得到类似的结果,即它也会对齐.但是,在iPhone 6 Plus上,日历小部件以某种方式缩放插图:

6P人像

6P风景

请注意,在横向版本中,时间和行都不对齐任何内容.

总之,我会说你可以安全地defaultMarginInset.left用来获得不错的结果.


SWIFT代码:

class TodayViewController: UIViewController, NCWidgetProviding {

    var defaultLeftInset: CGFloat = 0
    var marginIndicator = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()

        marginIndicator.backgroundColor = UIColor.whiteColor()
        view.addSubview(marginIndicator)
    }

    func widgetMarginInsetsForProposedMarginInsets(var defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
        defaultLeftInset = defaultMarginInsets.left

        defaultMarginInsets.left = 0
        return defaultMarginInsets
    }

    func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)!) {
        marginIndicator.frame = CGRectMake(defaultLeftInset, 0, 10, view.frame.size.height)
        completionHandler(NCUpdateResult.NewData)
    }
}


推荐阅读
author-avatar
青岛二三事-丶儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有