我正在尝试在两个视图控制器之间创建一个简单的过渡动画,两个视图控制器都具有相同的标签.我只想将标签从第一个视图控制器中的位置动画到第二个视图控制器中的位置(见下图).
我已经设置了我的视图控制器以使用自定义动画控制器,我可以通过插座访问视图控制器和标签.
在动画块中,我只是将第一个视图控制器上的标签框架设置为第二个视图控制器上的标签框架.
[UIView animateWithDuration:self.duration animations:^{
fromViewController.label.frame = toViewController.titleLabel.frame;
} completion:^(BOOL finished) {
[transitionContext completeTransition:finished];
}];
Run Code Online (Sandbox Code Playgroud)
而不是标签从屏幕中间移动到左上角的预期效果,一旦动画开始,标签就位于右下角,然后动画到中间.
我尝试预先打印出标签的位置,这显示了我在故事板中看到的相同框架:
fromViewController.label.frame: {{115.5, 313}, {144, 41}}
toViewController.titleLabel.frame: {{16, 12}, {144, 41}}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我没有得到预期的行为,以及它取而代之的是什么.
关于我可以改变什么以使我的动画正确运行以及为什么我看到这种行为的任何建议将不胜感激.
我正在尝试使用自动布局对齐两个 UILabel,其中第一个标签没有设置宽度,但使用内部内容大小,第二个标签应与第一个标签的宽度相同,将文本换行到新行。
理想情况下,第二个标签应该将数字线设置为0
与动态类型一起使用,但我2
暂时将其设置为,甚至给了它一个特定的高度。然而,当我尝试对齐equal widths
或 时trailing
,内在内容大小标签扩展到多行标签的宽度,就好像它都在一行上一样(见下图)。
有什么方法可以让我在不指定第一个标签的宽度的情况下实现我想要的?我希望它扩展内容以考虑动态类型,并且第二个标签具有相同的宽度并将所有文本换行到新行。
我想修改数字的尾随零的字体粗细和颜色.使用数字管道我可以指定8个小数,但我希望所有这些添加的零的视觉重要性低于其余的数字.我怎样才能以最正确的"正确"方式实现这一目标?
请参阅下面的图像,以便直观地展示我正在努力实现的目标:
我有一个"问题",乍一看看起来不像一个.所以,我有一个包含孩子的父div.一个孩子将包含文本,另一个孩子将包含图片.两者都是内联块元素(它们需要彼此相邻放置),并且具有设置宽度.现在,当图片div大于文本div时,父级继承该div的高度(最大的一个).但是第二个孩子(较小的)放在那个div的底部.我想要的是让div总是在顶部.
我试过了
top: 0px;
Run Code Online (Sandbox Code Playgroud)
和东西,但它不起作用.它只是坚持到底.
这是我的示例(html)代码:
<div id="parent">
<div id="child1"> Assassin's Creed IV: Black Flag: Gameplay Reveal Trailer - Chart your course through a treacherous and unpredictable world as the Assassin's Creed series hits the high seas in Assassin's Creed IV: Black Flag. <a href="http://bit.ly/Zny5pI">http://bit.ly/Zny5pI</a> </div>
<div id="child2"> <img width="300px" src="http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash3/536527_10151407411789285_1500143344_n.jpg" /> </div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是CSS:
#parent {
border: 2px solid green;
}
#child1 {
border: 2px solid black;
display: inline-block;
width: 400px;
margin: 2px;
top: 0px;
}
#child2 {
border: …
Run Code Online (Sandbox Code Playgroud) 我目前正在制作一个WatchKit应用程序,根据某些条件需要两种不同的布局.因为这两个布局非常相似(只有一个元素比另一个布局更多),所以我决定为两者使用相同的接口控制器(因为没有办法以编程方式确定在启动时加载哪个控制器).
但是,当涉及到不同的屏幕尺寸时会出现问题:
在我的第一个布局中,我想要三个元素在两种尺寸上填充屏幕.为了达到这个目的,我使用百分比值来表示它们的尺寸,总是加起来达到100%(这样,38毫米就不需要滚动了,42毫米上没有空白空间).
在第二种布局中,屏幕上还有几个元素.因此,当我对相同元素使用相同的百分比值时,它们会增长,因为接口控制器的总大小更大.
你们建议我做些什么来解决这个问题?
编辑1: 图片意味着代表我想要的样子.现在,元素(如地图和按钮)在两种情况下都是接口控制器大小的30%和40%,这使得它们在第二种布局上变得非常庞大.我希望它们在两种情况下都保持相同的固定大小.但是,使用固定数字会使它们对于38mm而言太大或对于42mm而言太小.
编辑2: 似乎有点混乱:在Apple Watch上布置元素时,有三个选项:
当我使用第二个选项时,相对而言,我在第一个布局中的38mm和42mm手表上都获得了完美的输出.但是,在第二个布局中向屏幕添加更多元素时,容器的大小会增加,元素的大小也会增加.当我使用第三个选项,固定时,我可以在任何一个尺寸上获得完美的输出.元素对于38mm来说太大了,即使在第一个布局中也需要滚动.或者42mm的元素是两个小的,并且有大量的开放空间.
我需要一个解决方案,让第一个布局中的元素填满屏幕(例如使用选项2),但不会增加布局2中元素的大小(例如使用选项3).在WatchKit中无法以编程方式更改此内容,因此我需要提出可行的第三种解决方案.
有什么建议?
我正在努力实现以下效果:
到目前为止,我有一个侦听单击的工作函数:
- (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer {
CGPoint p = [gestureRecognizer locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];
if(indexPath != nil) {
[self.tableView beginUpdates];
*Call heightForRowAtIndexPath here?*
[self.tableView endUpdates];
}
}
Run Code Online (Sandbox Code Playgroud)
我的heightForRowAtIndexPath
:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"runs");
return 64;
}
Run Code Online (Sandbox Code Playgroud)
至于我已经能够在网上的不同网站的帮助下弄清楚,我必须在[self.tableView beginUpdates]
和之间以某种方式调用该函数[self.tableView endUpdates]
.但是我该怎么做?我对Xcode或Objective C并不熟悉,所以我们将不胜感激!
提前致谢.
亚历山大.
ios ×3
objective-c ×3
angular ×1
animation ×1
autolayout ×1
css ×1
html ×1
javascript ×1
layout ×1
parent-child ×1
uitableview ×1
watchkit ×1
xcode ×1