这就是我目前所拥有的:
let topColor = UIColor(red: 2/255, green: 138/255, blue: 191/255, alpha: 1)
let bottomColor = UIColor(red: 1/255, green: 66/255, blue: 125/255, alpha: 1)
func configureGradient() {
let sectionRect = tableView.rect(forSection: currentSelectedIndex)
let backgroundView = UIView(frame: sectionRect)
backgroundView.layer.zPosition = -1
// backgroundView.backgroundColor = bottomColor
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [topColor, bottomColor]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.frame = sectionRect
backgroundView.layer.insertSublayer(gradientLayer, at: 0)
tableView.addSubview(backgroundView)
}
我在网络电话和tableView.reloadData()
currentSelectedIndex
默认为0
,并在点按标题时更改为新部分的索引。这是一个手风琴桌面视图,所以最多只能看到一个部分。
由于某种原因,这不起作用,我不确定我在渐变代码中缺少什么。我知道它正确地得到了框架,因为如果我注释掉渐变代码并自己添加背景颜色,它就可以完美地运行。
此外,我将zPosition
设置为-1
。没有它backgroundView
掩盖了整个视图。将其设置为-1
我可以看到视图的其余部分,但它仍然阻止用户交互。当我查看UI层次结构时,它会在所有内容之上显示它。有没有更好的方法以编程方式调整位置低于其他一切?我已经尝试将其设置为-1000
只是为了确定,但没有运气。
小结:
zPosition
以阻止其阻止对用户界面的访问?答案 0 :(得分:1)
namespace App\Mail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class RegisteredUserWelcome extends Mailable
{
use Queueable, SerializesModels;
protected $user;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->markdown('emails.registered')
->with([
'firstname' => $this->user->firstname,
'lastname' => $this->user->lastname,
]);
}
}
' CAGradientLayer
需要.colors
个数组,但您要传递CGColor
s。要解决此问题,请传递UIColor
的{{1}}版本:
CGColor
出于某种原因,UIColor
被声明为类型gradientLayer.colors = [topColor.cgColor, bottomColor.cgColor]
,因此编译器允许它通过,但最终会出现空白渐变。
答案 1 :(得分:0)
您应该使用CGColor
代替UIColor
s。
gradientLayer.colors = [topColor.cgColor, bottomColor.cgColor]
虽然参数为[Any]?
,但文档说明了:
定义每个渐变色标的颜色的
CGColorRef
个对象数组。动画。
答案 2 :(得分:0)
对于我的问题的第2部分,这里是答案。移除addSubview
以及zPosition
并使用此功能:
tableView.insertSubview(backgroundView, at: 0)