相关疑难解决方法(0)

如何在swift应用程序中获取keyWindow引用?

在UIViewController的viewDidLoad方法中的Objective-C中,我这样做是为了在我的iOS应用程序中获取keyWindow引用:

 UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];
Run Code Online (Sandbox Code Playgroud)

所以,我将这个视图控制器移植到Swift中,我在viewDidLoad调用中执行此操作:

let window = UIApplication.sharedApplication().keyWindow
Run Code Online (Sandbox Code Playgroud)

我试图理解为什么窗口是零.当我在该行之后放置一个断点时,然后在控制台中检查窗口,我得到了这个:

(lldb) po window
nil
Run Code Online (Sandbox Code Playgroud)

如何让窗口成为​​swift中我的应用程序的keyWindow的有效引用?

ios swift

26
推荐指数
4
解决办法
3万
查看次数

如何以编程方式自动将标签的preferredMaxLayoutWidth设置为自动?

当我尝试在故事板中将标签的首选宽度设置自动时,我收到以下错误:

属性不可用:自动首选最大布局宽度在8.0之前的iOS版本上不可用

由于我需要我的布局适用于iOS 7和8,我计划执行以下操作:

  1. 在故事板中将值设置为Explicit.
  2. 在iOS 7上,以编程方式将值设置为显式的计算宽度.
  3. 在iOS 8上,以编程方式将值设置为自动.

1和2很容易.我该如何做第3步?我可以设置它吗?


这是我到目前为止所尝试的...

如果您在故事板上将值设置为自动并进行检查preferredMaxLayoutWidth,您将看到它是0.

但是,尝试将其设置为0,即使它表示已经为0,也不能正常工作(例如标签保持为单行).例如,我尝试在故事板中将值设置为自动,然后viewDidLoad运行以下命令:

self.label.preferredMaxLayoutWidth = self.label.preferredMaxLayoutWidth;
Run Code Online (Sandbox Code Playgroud)

当我不运行上面的代码时,标签的大小正确.但是,当我运行上面的代码(它什么也不做)时,它仍然是一行(不良行为).


UILabel的头文件说:

// Support for constraint-based layout (auto layout)
// If nonzero, this is used when determining -intrinsicContentSize for multiline labels
@property(nonatomic) CGFloat preferredMaxLayoutWidth NS_AVAILABLE_IOS(6_0);
Run Code Online (Sandbox Code Playgroud)

至于常数,我找不到任何东西.我能想到的最接近的常数是什么UITableViewAutomaticDimension,哪个不起作用.

这是故事板的样子......

自动布局宽度:

<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" text="Foo" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bis-iG-g4l">
    <rect key="frame" x="20" y="116" width="560" height="21"/>
    <fontDescription …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uilabel ios autolayout

15
推荐指数
1
解决办法
8692
查看次数

背景图像垂直拉伸,但水平重复

目前正在使用:

self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.png")!)
Run Code Online (Sandbox Code Playgroud)

但是问题是它在垂直和水平方向都重复。我正在尝试使其水平重复,同时垂直拉伸以适合屏幕。

ios swift

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

如何在Swift中获取屏幕边缘的X和Y.

我在这里编写了这段代码,但它没有按照我想要的方式工作,我只在所有视图中得到随机位置,我的意思是在屏幕边缘获得随机位置.我该怎么做?

    let viewHeight = self.view!.bounds.height
    let viewWidth = self.view!.bounds.width

    randomYPosition = CGFloat(arc4random_uniform(UInt32(viewHeight)))
    randomXPosition = CGFloat(arc4random_uniform(UInt32(viewWidth)))
Run Code Online (Sandbox Code Playgroud)

ios swift

2
推荐指数
2
解决办法
6524
查看次数

标签 统计

ios ×4

swift ×3

autolayout ×1

iphone ×1

objective-c ×1

uilabel ×1