作者:青岛二三事-丶儿 | 来源:互联网 | 2023-05-29 12:00
我试图找出如何计算今日扩展主视图中的左边距,以将内容与今日视图标签的其余部分对齐.
这是一个使用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的默认日历控件(注意这里的时间标签的右边缘与蓝线对齐):


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


请注意,在横向版本中,时间和行都不对齐任何内容.
总之,我会说你可以安全地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)
}
}