gpt4 book ai didi

objective-c - 使用自动布局,当我更改标签文本时标签位置会重置

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:36 26 4
gpt4 key购买 nike

我正在使用 Objective-c 开发一个非常简单的应用程序。
在应用中,用户可以通过拖动屏幕来更改标签的位置。

点击并拖动屏幕,标签上下移动以匹配手指的位置。
当你松开手指时,标签的坐标信息被设置为它的文本。

但标签位置在其文本更改时重置。

// IBOutlet UILabel *label

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touch = [[touches anyObject] locationInView:self.view];
label.center = CGPointMake(label.center.x, touch.y);
}

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touch = [[touches anyObject] locationInView:self.view];
label.center = CGPointMake(label.center.x, touch.y);
}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touch = [[touches anyObject] locationInView:self.view];
label.text = [NSString stringWithFormat:@"y = %f", touch.y];
}

touchesEnded事件中,只改变标签的文字,
但它的位置已经重置。

我尝试像下面这样更改touchesEnded事件,但它并没有解决问题。

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touch = [[touches anyObject] locationInView:self.view];
label.text = [NSString stringWithFormat:@"y = %f", touch.y];
label.center = CGPointMake(label.center.x, touch.y); // add this line
}

我想解决这个奇怪的行为而不取消选中“使用自动布局”
我想继续使用自动布局。

我的应用程序有 4 个屏幕截图。

4 Screenshots

  1. 第一张图片是 Storyboard。
    我有一个带有自动布局约束的标签。
  2. 第二张图片是启动应用后的屏幕截图。
  3. 第三张图片是用户拖动屏幕时,
    标签向下移动以匹配手指。
  4. 第四张是刚松开手指
    并且标签文本已更改。

最佳答案

您不能使用自动布局更改事物的中心/框架;这些是相反的。做一个或另一个 - 而不是两个。

因此,您不必关闭自动布局,但如果您不这样做,则必须使用自动布局,并且自动布局,以放置东西。

移动标签时,不要改变它的中心 - 改变它的约束。或者至少,改变了它的中心,改变它的约束以匹配。

否则,当发生布局时,约束会将其放回您告诉他们 放置它的位置。布局确实在您更改文本时发生,并且在许多其他时间发生。

关于objective-c - 使用自动布局,当我更改标签文本时标签位置会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com