我在主视图中有一个带有文本的 UILabel - "Very Very long text"。正确的宽度是 142,但我已经将它缩短到 55。
基本上我想实现一个选取框类型的滚动,所以我编写了代码将它添加到子视图中并在该视图的范围内对其进行动画处理。
代码——
CGRect tempLblFrame = _lblLongText.frame;
UIView *lblView = [[UIView alloc] initWithFrame:tempLblFrame];
//Add label to UIView at 0,0 wrt to new UIView
tempLblFrame.origin.x = 0;
tempLblFrame.origin.y = 0;
[_lblLongText setFrame:tempLblFrame];
[_lblLongText removeFromSuperview];
[lblView addSubview:_lblLongText];
//SetClipToBounds so that if label moves out of bounds of its superview, it wont be displayed
[lblView setClipsToBounds:YES];
[lblView setBackgroundColor:[UIColor cyanColor]];
[self.view addSubview:lblView];
在此之后,我在模拟器上得到了这个输出——>
当我使用此代码尝试动画时会出现问题 -
tempLblFrame.origin.x = -_lblLongText.intrinsicContentSize.width;
[UIView animateWithDuration:2.0 delay:1.0 options:UIViewAnimationOptionCurveLinear
animations:^{
[_lblLongText setFrame:tempLblFrame];
}
completion:^(BOOL finished) {
NSLog(@"completed");
}];
我希望我能看到整个“非常长的文本”,而只有“非常...”从左到右滚动。
为了解决这个问题,我添加了一行代码——
//Add label to UIView at 0,0 wrt to new UIView
tempLblFrame.origin.x = 0;
tempLblFrame.origin.y = 0;
tempLblFrame.size.width = _lblLongText.intrinsicContentSize.width; //THIS LINE WAS ADDED
[_lblLongText setFrame:tempLblFrame];
[_lblLongText removeFromSuperview];
[lblView addSubview:_lblLongText];
我认为全文将设置在新添加的 UIView 中,并且它会正确滚动。但是在模拟器中运行给了我这个——
再一次,只有“非常……”从左到右滚动。
我究竟做错了什么?请帮忙!!
编辑
显然罪魁祸首是 AutoLayout。
我不知道为什么,但是一旦我取消选中 XIB 中视图的“使用自动布局”,一切都开始按预期工作。设置 tempLblFrame.origin.x = -_lblLongText.intrinsicContentSize.width; 工作正常,卷轴也正常工作。
对此有何解释!!?