为啥flex-shrink属性不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥flex-shrink属性不起作用相关的知识,希望对你有一定的参考价值。

参考技术A 用法错误
flex-grow控制flex container有多余空间的时候怎么分配,默认值为0,即所有的flex items都不分配。
flex-shrink1则控制flex container空间不足以包含flex items时,flex items怎样缩小所占空间,来防止溢出container。其默认值为1,flex items们根据自身的flex-basis值做相应调整。
看一个示例:
代码如下 复制代码
<div class='example-Grid'>
<div class='example-first'>汇成一道道光的流河</div>
<div class='example-last'>我曾在天上见过地的繁华</div>
</div>
<style>
.example-Grid
display: flex;
border: 2px solid black;
width: 250px;

.example-first
background: red;
flex-basis: 150px;
flex-shrink: 1;

.example-last
background:orange;
flex-basis: 200px;
flex-shrink:1;

</style>

为啥标记为@IBInspectable 的属性不起作用?

【中文标题】为啥标记为@IBInspectable 的属性不起作用?【英文标题】:Why properties tagged @IBInspectable is not working?为什么标记为@IBInspectable 的属性不起作用? 【发布时间】:2016-10-18 08:33:45 【问题描述】:

我在这里按照tutorial 创建了一个可检查和可设计的视图。我只想在UIView 中添加边框颜色、边框宽度和圆角边框功能。

我已经成功展示了这些属性。但不管我在情节提要上设置了什么,结果仍然就像他们不在那里一样。没有边框,即使我将边框设置为宽度为 2 且颜色为黑色。它没有在情节提要和运行时显示。我已将边框设置为 2 宽度,但在运行时,我在 didViewLoad 处打印边框宽度值,结果为 0。可能有什么问题?

@IBDesignable extension view: UIView 

    @IBInspectable var cornerRadius: CGFloat 
        get 
            return layer.cornerRadius
        
        set 
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        
    

    @IBInspectable var borderWidth: CGFloat 
        get 
            return layer.borderWidth;
        
        set 
            layer.borderWidth = borderWidth;
        
    

    @IBInspectable var borderColor: UIColor? 
        get 
            return UIColor(CGColor: layer.borderColor!);
        
        set 
            layer.borderColor = borderColor?.CGColor
        
    


这也不起作用:

@IBDesignable class BOView: UIView 

    @IBInspectable var cornerRadius: CGFloat 
        get 
            return layer.cornerRadius
        
        set 
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        
    

    @IBInspectable var borderWidth: CGFloat 
        get 
            return layer.borderWidth;
        
        set 
            layer.borderWidth = borderWidth;
        
    

    @IBInspectable var borderColor: UIColor? 
        get 
            return UIColor(CGColor: layer.borderColor!);
        
        set 
            layer.borderColor = borderColor?.CGColor
        
    


【问题讨论】:

你在 IB 中打开菜单 EditorAutomatically Refresh Views 了吗? @holex 该选项已打开。 【参考方案1】:

尝试使用 newValue 而不是实际值。

例如,

@IBInspectable var borderWidth: CGFloat 
    get 
        return layer.borderWidth
    
    set 
        layer.borderWidth = newValue
    

Chen,我确实更喜欢您这样做的方式,但也请注意,您可以直接从 Storyboard 中尝试做的事情,而无需使用 IBDesignable。您可以在用户定义的运行时属性中设置图层属性。

【讨论】:

你在发布之前检查过这个答案吗?有用吗? 哦哦哦原来是这样!是的,我需要使用newValue 而不是变量名。谢谢!!!!但是 IBDesignable 仍然不起作用......但这是一个很大的飞跃! 等等,IBDesignable 现在可以工作了!!我不知道为什么!也许我需要关闭并重新打开 Xcode。谢谢! 很高兴。你的扩展有效吗?它可能真的很方便。 @CarienvanZyl 是的!现在有一个全新的世界和可能性在我面前打开了哈哈。我必须实现控制器并运行它的日子已经一去不复返了,只是为了看看边框是什么样子的。我认为这个可检查和可设计的东西非常复杂,所以直到现在我才去了解它。哦,我离真相太远了,哈哈。

以上是关于为啥flex-shrink属性不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥从函数调用分配给属性 innerHTML 不起作用?

为啥我的属性路由不起作用?

为啥 `android:foreground` 属性不起作用?

为啥没有 enctype 属性文件上传不起作用?

为啥 addEventListener 属性对动态 HTMLcollection 对象不起作用?

为啥 C++ CLI 索引属性在 C# 中不起作用?