问题标签 [adaptive-ui]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
463 浏览

ios - How to change the value of 'mutiplier' property of NSLayoutConstarint in iOS8

I use Adaptive layout features for designing an app. I take a IBOutlet of an "Aspect Ratio" constraint . I want to change the value of this Aspect Ratio Value to the double of current value. The problem is that "constraint" property can be set easily from Code, but "multiplier" property is read only property. For Aspect Ratio Change, "multipier" value change is necessary . How Could I do this?.

In code

Results that

0 投票
1 回答
700 浏览

ios - 使用大小类更改字体大小

我正在使用size classesstoryboard的来创建自适应布局,并且我attributed UILabel在其中有 s。现在我想更改这些标签的 iPad 字体大小,但似乎带有属性size classesUILabel文本在IB. 所以问题是如何更改UILabel带有属性字符串的字体大小。

0 投票
1 回答
715 浏览

ios - 确定视图控制器的呈现方式

我正在以模态方式展示一个视图控制器,并将其UIModalPresentationStyle设置为自适应样式UIModalPresentationPopover。这种风格在水平紧凑的环境(iPhone 纵向)中会出现在全屏上。在水平规则和垂直紧凑的环境(iPhone 6 Plus 横向)中,它将出现在表单中。在常规环境 (iPad) 中,它会显示为弹出框。这是期望的行为。

我需要以编程方式确定该控制器的实际显示方式 - 表单、全屏或弹出窗口。如何从正在呈现的视图控制器中确定这一点?

原因是我只需要在它不在弹出框内的情况下添加一个完成按钮。(或者在它位于弹出框的情况下隐藏它。)

创建视图控制器:

在视图控制器内部:

0 投票
2 回答
1187 浏览

ios8 - 甚至为 iPad sim 调用adaptivePresentationStyleForPresentationController

我有一个实现 UIPopoverPresentationControllerDelegate 方法的视图控制器:

据我了解,这应该只适用于 iPhone 6 等紧凑型尺寸,而不适用于 iPad。但是在一个项目中,它甚至被 iPad 调用,因此,我没有得到一个弹出框,而是全屏模式的东西。

我看不出是什么导致了这种情况发生。我查看了另一个具有大致相同设置的项目,并确认在 iPad sim(仅限 iphone)期间不会调用此方法。

还有人经历过这个吗?

0 投票
2 回答
1052 浏览

ios - IOS8 SplitVC + TabBarController + NavigationController

我正在使用大小类做一个通用应用程序,我正在尝试在主视图/主视图中使用带有 TabBarController 的 SplitView。在添加 splitView 之前一切正常,但现在应用程序崩溃(原因取决于视图的层次结构)。

所以我尝试了从 Apple SplitView 模板开始的相同故事板,并在其主视图/主视图上添加了 TabBarController ......同样的问题。

层次结构 - TabBarController 中的嵌入式主 NavigationController:SplitVC (Master) > TabBarController > NavigationController > TableView SplitVC (Detail) > NavigationController > View

在 AppDelegate.m 中添加了此代码(如此处所示stackoverflow questions ios8-tabbarcontroller...以防止 DetailView 以模态方式呈现):

它工作正常...除非您在 iPhone6 Plus 中进行模拟,在这种情况下,在纵向开始并选择一行之后,如果您以横向旋转,我会将详细视图视为主要视图和次要视图。

如果不使用 iPhone 纵向添加此代码,详细视图会以模态方式呈现,当然也没有导航按钮。

编辑

经过不同的尝试和一些外部帮助后,我已经向解决方案迈出了一些步骤。

短版(请参阅长版以了解为什么必须这样做)

该问题的正确解决方案是继承 TabBarController 并使其支持一些方法:

现在我遇到了 viewControllers 堆栈的问题:对于 iPhone6Plus(唯一支持水平常规和紧凑的),如果在横向时,您更改选项卡而不选择行(因此 detailView 仍然是前一个选项卡的选项卡) ) 然后纵向旋转。

我知道我必须实现正确管理视图堆栈的分离和折叠方法,但我不知道如何。有人可以帮忙吗?

长版本(SplitViewController 行为)

通常,拆分视图控制器和导航控制器一起工作以确保从包含在拆分视图控制器中的视图控制器调用 -showDetailViewController:sender: 会导致新的详细视图控制器被推送到导航堆栈(在水平紧凑的环境)。为此,UISplitViewController 覆盖 -showDetailViewController:sender: 并且,如果水平紧凑,则调用其主视图控制器的 -showViewController:sender: 方法。UINavigationController 覆盖 -showViewController:sender: 并将传入的视图控制器推送到导航堆栈上。

但是,UITabBarController 不会覆盖 -showViewController:sender: ,因此它继承了以模态方式呈现传入视图控制器的默认实现。要解决这个问题,如果 selectedViewController 是导航控制器,我必须继承 UITabBarController 并覆盖 -showViewController:sender: 以转发到选项卡栏控制器的 selectedViewController。

此外,当拆分视图控制器从紧凑型到水平尺寸类别转换为常规水平尺寸类别时,拆分视图控制器首先向其委托发送 -splitViewController:separateSecondaryViewControllerFromPrimaryViewController: 消息。委托可以实现此方法并自行处理分离,返回详细视图控制器。如果委托没有实现这个方法,或者如果实现返回 nil,则拆分视图控制器发送一个 -separateSecondaryViewControllerForSplitViewController: 消息到它的主视图控制器。主视图控制器应该实现这个方法来处理分离。UINavigationController 确实实现了 -separateSecondaryViewControllerForSplitViewController:。它' s 实现将顶视图控制器从导航堆栈中弹出并返回。因为我使用标签栏控制器作为主视图控制器,所以我必须实现 -separateSecondaryViewControllerForSplitViewController: 并自己处理分离。

我还需要实现我自己的折叠逻辑。当拆分视图控制器从常规大小类转换为紧凑水平大小类时,拆分视图控制器首先向其委托发送 -splitViewController:collapseSecondaryViewController:ontoPrimaryViewController: 消息。委托可以实现此方法并自行处理折叠。如果委托未实现此方法,则拆分视图控制器将 -collapseSecondaryViewController:forSplitViewController: 消息发送到其主视图控制器。主视图控制器应该实现这个方法来处理分离。

UINavigationController 确实实现了 -collapseSecondaryViewController:forSplitViewController:。它的实现将辅助视图控制器推送到导航堆栈上。因为我使用标签栏控制器作为主视图控制器,所以我必须实现 -collapseSecondaryViewController:forSplitViewController: 并自己处理折叠。

0 投票
1 回答
317 浏览

objective-c - 在两个不同的 UIPresentationController 之间进行适配

UIPresentationController根据当前的特征集合,我想在两个不同的 之间进行调整。例如,这两个控制器可以UIPopoverPresentationController用于任何特征,而自定义UIPresentationController用于紧凑的水平特征(例如 iPhone)。

不幸的是,这在最新的 iOS 8 中似乎是不可能的。特别是:

  • 您可以设置一个UIAdaptivePresentationControllerDelegate来换出演示风格,但只允许标准的全屏演示控制器。

  • 您可以在呈现视图控制器之前选择要使用的呈现控制器,但在呈现后,当特征集合发生变化时,这实际上并不能适应,例如在 iPad 多任务处理或方向变化中。

几个不同的解决方案尝试:TumblrIrace

有什么建议么?

0 投票
1 回答
2134 浏览

css - 水平 ul li 导航引导程序

我有带有 bootsrap 的 ul li 导航,其中 li 具有固定宽度,并且我有很多 li,我想在移动设备上显示菜单的所有 li 元素(我不知道如何)

问题:我想horizontal在移动设备上显示所有菜单,但它正在运行vertical,以及如何将所有元素放到小屏幕上

https://jsfiddle.net/fvove846/

0 投票
0 回答
212 浏览

ios - 在 iOS 8+ 中实现所需的自适应 UISplitViewController 行为的建议

我正在尝试使用 iOS 8+ 中的 Master/Detail UISplitViewController 实现一组自适应行为,这在我看来很直观,但不是(据我所知)Apple 示例的“典型”或在我见过的任何各种 iOS 8+ UISplitViewController 教程。所以我转向这里寻求建议,认为我不能成为第一个想要这些行为的人,它们是:

1) 在所有纵向的 iPhone(加或不加)上,在主表视图中选择一个单元格会“推动”屏幕上的详细视图,并使主表视图在屏幕外显示动画——即通常的导航控制器行为。

2)在所有横向的 iPhone(加或不)上,以及在所有方向的 iPad 上,主视图在单元格选择后保持可见,直到/除非用户 a)点击详细视图内部或 b)点击“完整-screen”按钮在详细视图的顶部栏中,此时主视图动画显示在视图之外。

3) 在所有横向的 iPhone(加或不加)和所有方向的 iPad 上,详细视图会动态调整大小,以便 a) 当主视图显示时,详细视图的任何部分都不会被主视图覆盖/遮挡视图,以及 b) 当主视图不显示时,详细视图占据屏幕的整个宽度。

4) 在所有设备和所有方向上,当主视图未显示时,点击详细视图顶部栏中的按钮,会导致主视图在屏幕上显示动画 - 即,作为所有 iPhone 纵向的“弹出”方向,并在所有 iPhone(加或不加)横向和所有方向的 iPad 上作为细节视图挤压“窗格”。

换句话说,在所有方向的所有设备上——除了iPhone 的纵向方向,在这种情况下应该获得通常的导航控制器行为——主视图应该是一个细节视图挤压(而不是覆盖/模糊)“窗格”,它保持可见,直到/除非用户点击详细视图内部或详细视图顶部栏中的“转到全屏”按钮;此时,主视图应在屏幕外显示动画,而详细视图应占据屏幕的整个宽度。

任何建议/示例代码/相同的链接将不胜感激!(这些天我在 Swift 中工作,但可以很容易地将 Objective-C 代码适应 Swift。)

谢谢,

卡尔

更新 1

只需将 UISplitViewController 的 preferredDisplayMode 属性设置为 .AllVisible (Obj-C = UISplitViewControllerDisplayModeAllVisible) ,上面的要求 2 和 3 就很容易在 iPad上实现。作为附带奖励,此模式在详细信息视图的顶部栏中为我提供了所需的“进入全屏”按钮。

但是,在除 6+ 以外的任何 iPhone 上,我仍然无法获得所需的行为——即保持主要(主)和次要(细节)视图控制器在横向模式下始终可见。我希望viewWillTransitionToSize:withTransitionCoordinator在我的自定义 UISplitViewController 中覆盖以将其辅助视图控制器的大小类设置为UITraitCollection(horizontalSizeClass: .Regular)可以解决问题,但没有这样的运气:iOS 在 iPhone 上进行横向布局时似乎忽略了这个覆盖大小类。

我见过的一个例子(在 Ray Wenderlich 的“iOS 8 by Tutorials”中)表明在所有 iPhone 上实现我想要的方法(好吧,可能不包括 iPhone 4s,因为它的屏幕是如此“短”)是嵌入UISplitViewController 在父视图控制器的容器视图中,并覆盖该父视图控制器的viewWillTransitionToSize:withTransitionCoordinator方法以设置子 UISplitViewController 的大小类。如果这是正确的或唯一的方法,我愿意这样做,但这似乎是一个我想尽可能避免的kludge。

更新 2

我已经尝试了 Ray Wenderlich 的技术,用于将类似 iPhone-6+ 的 UISplitViewController 横向行为扩展到其他 iPhone,并且可以确认它有效。我什至会说如果感觉不如我想象的那么笨拙,尽管它仍然不是我认为的“纯粹”解决方案(从某种意义上说,它不是我从严格的 UI 设计中得出的)方法)。

如果有人知道实现这种行为的更直接的方法,我仍然想知道它。因此,我将把它留给其他任何想要这种行为的人,并且为了寻求更好的解决方案而“未回答”。

0 投票
2 回答
187 浏览

ios - iOS 8 到 iphone 5 到 iphone 6+ 中的自适应 UI 界面

我创建了一个在不同设备上运行的应用程序,但是当我在界面生成器中设置所有内容时,看起来尽管有限制,但标签或按钮在模拟器的不同设备中的位置不同。即:我有一个我设计的界面,我将它用作界面生成器中的背景图像视图,使用 iphone 5 尺寸作为参考。在这张图片中,我设计了一个字段,当我在其中放置标签时,它在模拟的 iphone 5 和 iphone 6 中看起来处于不同的位置,即使它以相同的方式受到约束。我究竟做错了什么?非常感谢您的帮助!!!

ps:我假设图像视图大小在 iphone 5 和 6 之间是成比例的,所以它们自然应该具有相同的纵横比,因此标签约束也会

0 投票
2 回答
83 浏览

ios - 在 iOS 中将界面从一个设备扩展到另一个设备的问题

这个问题真的很令人沮丧,让我发疯。

我已经阅读了有关 AutoLayout 等的所有内容,但它一直在发生。我的界面有一个以图像视图为背景的视图,其顶部有一个较小的子视图(对应于我的图像中的一个字段)。我已经尝试了所有方法,但在切换设备时,子视图似乎没有与我的图像相应地缩放。顺便说一句,IB 预览并没有显示我在运行 iOS 模拟器时真正得到的东西,这正常吗?为什么?我做错了什么?我不知道还能尝试什么!

http://i58.tinypic.com/34xqtc6.png

编辑:我不能发布图片:(