获取多个视图的最大宽度并将其设置为所有视图宽度的最有效方法?

时间:2017-09-18 22:36:22

标签: swift

获取视图列表的宽度,找到最大值并将该值设置为这些视图的宽度,最有效的方法(最少量的代码行)是什么?这个例子使用if / else作为2个视图(以帮助说明我想要完成的事情)但是如果有3个或30个视图呢?

head(FeatherData, n=10)
    Location   Status   FeatherD               Species        ID
## 1        TX Resident  -27.41495         Carolina wren CARW (32)
## 2        TX Resident  -29.17626         Carolina wren CARW (32)
## 3        TX Resident  -31.08070         Carolina wren CARW (32)
## 4        TX Migrant  -169.19579 Yellow-rumped warbler YRWA (28)
## 5        TX Migrant  -170.42079 Yellow-rumped warbler YRWA (28)
## 6        TX Migrant  -158.66925 Yellow-rumped warbler YRWA (28)
## 7        TX Migrant  -165.55278 Yellow-rumped warbler YRWA (28)
## 8        TX Migrant  -170.43374 Yellow-rumped warbler YRWA (28)
## 9        TX Migrant  -170.21801 Yellow-rumped warbler YRWA (28)
## 10       TX Migrant  -184.45871 Yellow-rumped warbler YRWA (28)


 ggplot(FeatherData, aes(x = Location, y = FeatherD)) +
   geom_boxplot(alpha = 0.7, fill='#A4A4A4') +
   scale_y_continuous() +
   scale_x_discrete(name = "Location") +
   theme_bw() +
   theme(plot.title = element_text(size = 20, family = "Times", face = 
 "bold"),
         text = element_text(size = 20, family = "Times"),
         axis.title = element_text(face="bold"),
         axis.text.x=element_text(size = 15)) +
   ylab(expression(Feather~delta^2~H["f"]~"‰")) +
   facet_grid(. ~ Status)

2 个答案:

答案 0 :(得分:0)

听起来你正在寻找最大功能,例如:

let maxWidth = max(label1.bounds.width, label2.bounds.width)

答案 1 :(得分:0)

您可以使用max(by:)查找具有最大值的数组元素,您可以自己定义比较函数。在这种情况下,您可以使用.frame.size.width进行比较。

找到最大宽度后,您可以遍历所有标签并为每个标签指定最大宽度。

以下代码已经在操场上进行了测试,并且按预期工作。

let labels = [UILabel(),UILabel(),UILabel(),UILabel(),UILabel(),UILabel(),UILabel(),UILabel(),UILabel(),UILabel()]
labels[3].frame.size.width = 100
labels[5].frame.size.width = 200
let maxWidth = labels.max(by: {$0.0.frame.size.width < $0.1.frame.size.width})!.frame.size.width
labels.forEach{
    $0.frame.size.width = maxWidth!
}

打印测试的宽度值:

labels.forEach{
    print($0.frame.size.width) //prints 200 for each element of the array
}