youngsoft / TangramKit

TangramKit is a powerful iOS UI framework implemented by Swift. It integrates the functions with Android layout,iOS AutoLayout,SizeClass, HTML CSS float and flexbox and bootstrap. So you can use LinearLayout,RelativeLayout,FrameLayout,TableLayout,FlowLayout,FloatLayout,LayoutSizeClass to build your App 自动布局 UIView UITableView UICollectionView
MIT License
1.21k stars 175 forks source link

tg_height 高度 设置weight bug? #30

Closed shingohu closed 5 years ago

shingohu commented 5 years ago

override func viewDidLoad() { super.viewDidLoad()

// view.addSubview(rootLayout) //
// let homeVC = HomeViewController() // addChildViewController(homeVC, toContainerView: rootLayout.homeView) //
// let tabVC = MainTabViewController() // addChildViewController(tabVC, toContainerView: rootLayout.tabView)

    let linearLayout = TGLinearLayout(frame: self.view.frame, orientation: .vert)

    self.view.addSubview(linearLayout)

    let l2 = TGLinearLayout(.vert)
    l2.tg_width.equal(.fill)
    l2.tg_height.equal(10%)

    l2.backgroundColor = UIColor.red

    linearLayout.addSubview(l2)

}

这里 高度不是10% 而是全屏

youngsoft commented 5 years ago

这不是一个BUG。对于垂直线性布局来说当高度或者垂直间距设置为TGWeight类型,也就是设置为百分比时,的概念并不是占用父视图的比例空间,而是对剩余空间中的所有设置为百分比的进行比例分割。 假如一个线性布局的高度是100,里面有三个子视图的高度分别为:

A:20 B:30% C:20%

那么B和C的高度计算时会将这两个相对占比的总和作为分母,来计算实际的比例:

A的真实高度 = 20 B的真实高度 = (100 - 20) 0.3 / (0.3 + 0.2) = 48 C的真实高度 = (100 - 20)0.2 /(0.3+0.2) = 32

-------- 因此当垂直线性布局中只有一个子视图,如论设置任何比例值,分子分母的值都是一样的,结果都是1,所以得到了你出现的全屏。这种逻辑就是这样设置。

如果你想要得到父视图高度的占比值你可以这样写:

l2.tg_height.equal(linearLayout, multiple:0.2)