Swift 3 - 自定义UIButton半径删除约束?

时间:2017-01-17 11:08:55

标签: swift uibutton autolayout uistackview

我的视图控制器拥有一个带3个按钮的堆栈视图。一个固定在中心,固定宽度,堆栈视图设置为按比例填充,使其他两个按钮对称。

但是我也在自定义按钮的角半径,一旦应用程序加载按钮,就会以不希望的方式调整大小。

我尝试过多次stackview分发和填充设置。从stackview中删除按钮,只是试图将它们绑定到正常UIView上的边缘,看起来没有用,但不确定是否会删除约束。

视觉上按钮位于屏幕的右下角,边缘和按钮之间有0个空格。目前它的布局方式似乎在多个设备上没有约束,导致它在较大的显示器上有空间,并在模拟器内的小显示器上退出屏幕。

尝试围绕所需角落的编码工作:

constructor:

m_connectTimeout.setInterval(5000);

connect(&m_socket, &QLocalSocket::connected, [&]()
{
    // this is called first and should stop the timer.
    m_connectTimeout.stop();
});


connect(&m_connectTimeout, &QTimer::timeout, [&](){
       // this is still called
});

可以在此处找到正在使用的UIView扩展: https://stackoverflow.com/a/35621736/5434541

有什么解决方案可以正确调整按钮角半径'并允许约束将按钮更新为应有的。

1 个答案:

答案 0 :(得分:0)

如果没有看到您的完整代码,我怀疑您是因为它使用边框绘制多个图层而从未删除任何内容!如果按钮调整大小,旧图层仍然存在。这是一个剪辑,显示在重绘时删除您应该能够适应的旧图层。我在堆栈视图中测试了它,并且它在旋转时也表现正确:

for x in range(i): 
  if x == " ":
    word.append(' ')
  else:
    word.append('_')

您还在评论中注明了应用延迟。我并不感到惊讶,因为每次更新都会多次调用布局,并且您每次都会创建一个新图层。您可以通过保存按钮框架的最后尺寸并进行比较来避免这种情况。如果它完全相同,请不要重新创建该图层。