小编Jos*_*Lin的帖子

自动布局约束:如何在调整大小时使视图保持其宽高比?

在界面构建器中,我们可以固定高度,引脚宽度,使两个视图宽度相等,但是如何设置约束,以便在调整视图大小时,它保持宽度/高度比?

在我的特定情况下,我的视图控制器中有一个UIImageView.当视图调整大小时,我希望我的图像视图调整大小,但保持3:2的宽度:高度比.在IB中可以做到吗?是否可以使用代码执行此操作?

谢谢!

xcode ios autolayout

31
推荐指数
2
解决办法
3万
查看次数

自定义容器控制器:transitionFromViewController:在动画之前查看未正确布局

这既是一个问题,也是一个部分解决方案.


*示例项目:

https://github.com/JosephLin/TransitionTest


问题1:

使用时,过渡动画开始时,不会显示transitionFromViewController:...toViewControllers 完成的布局viewWillAppear:.换句话说,预布局视图在动画期间显示,并且其内容在动画之后捕捉到布局后位置.

问题2:

如果我自定义导航栏的背景UIBarButtonItem,则条形按钮会在动画播放前显示错误的大小/位置,并在动画结束时捕捉到正确的大小/位置,类似于问题1.


为了演示这个问题,我做了一个裸骨的自定义容器控制器来执行一些自定义视图转换.它几乎是一个UINavigationController副本,它在视图之间进行交叉消解而不是推送动画.

'Push'方法如下所示:

- (void)pushController:(UIViewController *)toViewController
{
    UIViewController *fromViewController = [self.childViewControllers lastObject];

    [self addChildViewController:toViewController];
    toViewController.view.frame = self.view.bounds;

    NSLog(@"Before transitionFromViewController:");
    [self transitionFromViewController:fromViewController
                      toViewController:toViewController
                              duration:0.5
                               options:UIViewAnimationOptionTransitionCrossDissolve
                            animations:^{}
                            completion:^(BOOL finished) {
                                [toViewController didMoveToParentViewController:self];
                            }];
}
Run Code Online (Sandbox Code Playgroud)

现在,DetailViewController(我正在推动的视图控制器)需要布局其内容viewWillAppear:.它无法进行,viewDidLoad因为它当时没有正确的帧.

出于演示的目的,DetailViewController将其标签在不同的位置和颜色viewDidLoad,viewWillAppear以及viewDidAppear:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%s", __PRETTY_FUNCTION__);
    CGRect rect = self.descriptionLabel.frame;
    rect.origin.y = 50;
    self.descriptionLabel.frame …
Run Code Online (Sandbox Code Playgroud)

xcode uiviewcontroller ios uiappearance

24
推荐指数
1
解决办法
9089
查看次数

如何防止故事板中的占位符字符串包含在.strings文件中?

我正在使用Base和Xcode生成的.strings文件本地化我的故事板.问题是我的故事板有很多占位符文本将在运行时以编程方式替换.在我将它们传递给翻译器之前,我可以手动从.strings文件中删除这些行,但每次用ibtool刷新我的.strings文件时,这些行都会被它再次添加.

有没有办法UILabel在界面构建器中将某些UI元素(等等)标记为ibtool应该跳过的占位符?

xcode localization ios

10
推荐指数
0
解决办法
448
查看次数

iOS扩展:是否需要增加其捆绑版本(CFBundleVersion)?

我是否必须在我的扩展程序的Info.plist中增加CFBundleVersion以确保它覆盖现有的?或者,如果在主应用程序的Info.plist中这样做就足够了?

我正在进行今天的扩展,但我想这个问题适用于所有嵌入式二进制文件.

ios ios8-extension

10
推荐指数
3
解决办法
3523
查看次数

"错误:NULL"或"错误:无"?

只是想弄清楚什么是最佳实践:当使用方法时,(NSError**)发送它nil还是更好NULL

例如,

NSArray *items = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];

在文档中,它说"如果您不想要错误信息,可以为此参数指定nil".另一方面,由于它是一个双指针,NULL似乎也有意义吗?

null objective-c

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

你能从iOS获得WiFi设置并将其传递给BLE设备(类似于Withings)吗?

Withings iOS应用程序能够获取您的wifi设置并通过经典蓝牙将其传递到人体秤(见下面的屏幕截图).根据我所学到的,这是一项仅通过MFi计划提供的功能,即Withings Scale.

在此输入图像描述


我正在构建一个与外部BLE设备对话的应用程序.由于BLE设备不需要MFi,我想知道是否有办法用CoreBluetooth或其他框架做同样的事情?

Apple的MFi FAQ页面:

"仅使用蓝牙低功耗/ BTLE /蓝牙4.0或iOS支持的标准蓝牙配置文件连接到Apple设备的附件不属于MFi计划."


有关ClassicBluetooth/MFi的相关问题:

您可以将WiFi设置从iOS设备传递到ExternalAccessory对象吗?

bluetooth wifi ios mfi

6
推荐指数
0
解决办法
1843
查看次数

自动布局约束:调整大小时,将空间非均等地分配给子视图?

用一个例子来展示我的问题可能是最简单的,所以这里有:

我有一个容器视图,它有两个子视图,A和B.

容器:240x80

答:80x80,固定前/上/下间距.

B:160x80,固定前/上/下间距,固定h间距A.

在此输入图像描述

现在,当我将容器的大小调整为480x80时,我得到了这样的东西: 在此输入图像描述

那是因为Xcode认为我的约束是模糊的,所以它为我固定了A的宽度并给了B所有额外的水平空间.

好吧,我理解它的担忧,但我真正想要的是让A和B按比例调整大小,如下所示:

在此输入图像描述

我的预感是它与Hugging/Compression Resistance Priority设置有关,但我无法弄清楚如何设置这些值以获得我想要的结果!

以另一种方式提出这个问题,当放大容器时,如何指定额外空间的位置?如何设置优先级以便空间分配到视图A和视图B 4:6?5:5?8:2?

谢谢!

xcode ios autolayout

4
推荐指数
1
解决办法
2830
查看次数